คำถามติดแท็ก const

ค่าคงที่ในการเขียนโปรแกรมเป็นคำจำกัดความที่มีค่าคงที่ตลอดการทำงานของโปรแกรม ตัวอักษรในภาษาส่วนใหญ่เป็นค่าคงที่เช่น ในรูปแบบการเขียนโปรแกรมแบบอ้างอิงโปร่งใสทุกคำจำกัดความเป็นค่าคงที่ พื้นที่จัดเก็บข้อมูลที่ผ่านการรับรองคุณสมบัติ (ออบเจ็กต์, ฟิลด์, ตัวแปร, พารามิเตอร์) คือพื้นที่ที่ "ไม่เคยเปลี่ยนแปลง" จึงทำให้สามารถเพิ่มประสิทธิภาพของตัวสร้างโค้ดเสริมและตรวจสอบความถูกต้องของโปรแกรมเพิ่มเติมได้

9
ฉันจะเรียกใช้ฟังก์ชัน C ++ แบบพกพาที่ใช้ถ่าน ** บนบางแพลตฟอร์มและ const char ** บนแพลตฟอร์มอื่น ๆ ได้อย่างไร
บนเครื่อง Linux (และ OS X) ของฉันiconv()ฟังก์ชั่นมีต้นแบบนี้: size_t iconv (iconv_t, char **inbuf... ในขณะที่ FreeBSD จะมีลักษณะดังนี้: size_t iconv (iconv_t, const char **inbuf... ฉันต้องการให้โค้ด C ++ ของฉันสร้างบนทั้งสองแพลตฟอร์ม ด้วยคอมไพเลอร์ C การส่งผ่านchar**สำหรับconst char**พารามิเตอร์ (หรือในทางกลับกัน) มักจะส่งเสียงเตือนเท่านั้น อย่างไรก็ตามใน C ++ เป็นข้อผิดพลาดร้ายแรง ดังนั้นถ้าฉันผ่าน a char**มันจะไม่รวบรวมบน BSD และถ้าฉันส่งผ่านconst char**มันจะไม่คอมไพล์บน Linux / OS X ฉันจะเขียนโค้ดที่คอมไพล์ทั้งสองอย่างโดยไม่ต้องพยายามตรวจจับแพลตฟอร์มได้อย่างไร แนวคิด (ล้มเหลว) อย่างหนึ่งที่ฉันมีคือการจัดเตรียมต้นแบบท้องถิ่นที่แทนที่ส่วนหัวที่ให้มา: void myfunc(void) …
91 c++  const  portability 

3
เริ่มต้นสมาชิกคลาสคงที่หลายคนโดยใช้การเรียกฟังก์ชันหนึ่ง C ++
หากฉันมีตัวแปรสมาชิกคงที่แตกต่างกันสองตัวซึ่งทั้งสองต้องเริ่มต้นใหม่โดยใช้การเรียกฟังก์ชันเดียวกันมีวิธีการทำเช่นนี้โดยไม่ต้องเรียกใช้ฟังก์ชันสองครั้งหรือไม่ ตัวอย่างเช่นคลาสเศษส่วนที่ตัวเศษและตัวหารเป็นค่าคงที่ int gcd(int a, int b); // Greatest Common Divisor class Fraction { public: // Lets say we want to initialize to a reduced fraction Fraction(int a, int b) : numerator(a/gcd(a,b)), denominator(b/gcd(a,b)) { } private: const int numerator, denominator; }; ส่งผลให้เสียเวลาเนื่องจากฟังก์ชั่น GCD ถูกเรียกสองครั้ง คุณสามารถกำหนดสมาชิกคลาสใหม่gcd_a_bและก่อนกำหนดเอาต์พุตของ gcd ให้กับรายการนั้นในรายการ initializer แต่สิ่งนี้จะนำไปสู่การสูญเสียความจำ โดยทั่วไปแล้วมีวิธีการทำเช่นนี้โดยไม่ต้องใช้ฟังก์ชั่นการโทรหรือหน่วยความจำที่สูญเปล่า …

4
ทำไมฟังก์ชั่นค่าสัมบูรณ์ใน C ไม่ยอมรับอินพุต const?
ใน C ต้นแบบสำหรับฟังก์ชันค่าสัมบูรณ์ (ที่ยอมรับการลอย) คือ float fabsf( float ); ทำไมต้นแบบนี้จึงไม่ยอมรับค่าคงที่เช่นนี้ float fabsf( float const ); fabsf จะไม่เปลี่ยนค่าของอินพุตหรือไม่ หากฉันมีฟังก์ชั่นที่รับอินพุตและเรียกใช้ fabsf ฉันต้องบังคับให้หลีกเลี่ยงการระบุอินพุตเป็น const หรือไม่ วิธีที่เหมาะสมในการจัดการกับความถูกต้อง const ในสถานการณ์นี้คืออะไร?

1
const ทั่วโลกที่ไม่คัดลอกหรือโคลนทำงานใน Rust อย่างไร
บอกว่าฉันมีตัวอย่างต่อไปนี้ ( สนามเด็กเล่น ) struct A { pub val: u32 } const GLOBAL_A: A = A {val: 2}; fn main() { let some_a: A = GLOBAL_A; let other_a: A = GLOBAL_A; println!("double val = {}", some_a.val + other_a.val); } เนื่องจากAเป็นค่าCloneมิได้Copyผมจะถือว่าค่าของGLOBAL_Aจะถูกย้าย ที่ไม่สมเหตุสมผลสำหรับ const และตามที่แสดงไม่สามารถเป็นกรณีใด ๆ เพราะมันสามารถ "ย้าย" สองครั้ง มีกฎอะไรที่ช่วยให้ข้อมูลดังกล่าวข้างต้นในการทำงานพิจารณาAไม่ได้CloneหรือCopy?
20 rust  const  move 

3
การเรียกใช้ฟังก์ชันที่มีตัวชี้ไปยังไม่ใช่ const และตัวชี้ไปยังอาร์กิวเมนต์ const ของที่อยู่เดียวกัน
ฉันต้องการเขียนฟังก์ชั่นที่ป้อนอาร์เรย์ของข้อมูลและส่งออกอาเรย์อีกหนึ่งข้อมูลโดยใช้พอยน์เตอร์ ฉันสงสัยว่าผลลัพธ์คืออะไรถ้าทั้งคู่srcและdstชี้ไปยังที่อยู่เดียวกันเพราะฉันรู้ว่าคอมไพเลอร์สามารถปรับให้เหมาะสมสำหรับ const มันเป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่? (ฉันติดแท็กทั้ง C และ C ++ เพราะฉันไม่แน่ใจว่าคำตอบอาจแตกต่างกันหรือไม่และฉันต้องการทราบเกี่ยวกับทั้งคู่) void f(const char *src, char *dst) { dst[2] = src[0]; dst[1] = src[1]; dst[0] = src[2]; } int main() { char s[] = "123"; f(s,s); printf("%s\n", s); return 0; } นอกเหนือจากคำถามข้างต้นแล้วสิ่งนี้ได้กำหนดไว้อย่างชัดเจนหรือไม่หากฉันลบconstในรหัสต้นฉบับ?

2
ฉันต้องการเพิ่มเซกเมนต์ใหม่ (ด้วยชื่อเดียวกัน) ลงในอาเรย์การทำแผนที่ของฉัน แต่ใช้ elementId ที่แตกต่างกัน แต่ใช้วิธีเดียวกัน
ด้านล่างนี้คือ MapperInterface.php ฉันกำลังพยายามหาวิธีเพิ่มคำสั่ง if-else ลงใน const อาร์เรย์การแมป บางอย่างเช่น: if (LIN02 == “VN”) o Treat LIN03 as the SKU · else if (LIN04 == “VN”) o Treat LIN05 as the SKU <?php declare(strict_types=1); namespace Direct\OrderUpdate\Api; use Direct\OrderUpdate\Api\OrderUpdateInterface; /** * Interface MapperInterface * Translates parsed edi file data to a \Direct\OrderUpdate\Api\OrderUpdateInterface * …
14 php  arrays  mapping  const 

2
const expr สามารถประเมินได้อย่างไรอย่างรวดเร็ว
ฉันได้ทดลองใช้นิพจน์ const ซึ่งประเมินเวลารวบรวม แต่ฉันเล่นกับตัวอย่างที่ดูเหมือนรวดเร็วอย่างไม่น่าเชื่อเมื่อดำเนินการในเวลารวบรวม #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); } int main () { long int res = fib(45); std::cout << res; return 0; } เมื่อฉันเรียกใช้รหัสนี้ใช้เวลาประมาณ 7 วินาทีในการเรียกใช้ จนถึงตอนนี้ดีมาก แต่เมื่อฉันเปลี่ยนlong int res = fib(45)ไปconst long int res = fib(45)ก็จะใช้เวลาไม่ได้เป็นครั้งที่สอง …
13 c++  const  constexpr 

5
กำลังจับวัตถุที่สร้างขึ้นใหม่โดย const อ้างอิงพฤติกรรมที่ไม่ได้กำหนด
ต่อไปนี้เป็นตัวอย่าง (contrived) หรือไม่หรือเป็นพฤติกรรมที่ไม่ได้กำหนดไว้: // undefined behavior? const auto& c = SomeClass{}; // use c in code later const auto& v = c.GetSomeVariable();

1
จะป้องกันการแก้ไขข้อมูลอาเรย์ได้อย่างไร?
ว่าฉันมีชั้นเรียนที่มีลักษณะเช่นนี้ (นี่เป็นเพียงตัวอย่าง): class A { double *ptr; public: A() : ptr( new double[100] ) {} A( const A &other ) { other.ptr[7] = 15; } void doNotChangeMyData() const { ptr[43] = 14; } void changeMyData() { ptr[43] = 14; } ~A() { delete[] ptr; } }; constทั้งในตัวสร้างสำเนาและdoNotChangeMyDataฟังก์ชั่นให้มันเพื่อให้ptrไม่สามารถเปลี่ยนแปลงได้; ptrแต่นี้ยังช่วยให้ฉันเพื่อปรับเปลี่ยนเนื้อหาของอาร์เรย์ที่ชี้ไปตาม มีวิธีการป้องกันเนื้อหาของptrอาเรย์จากการเปลี่ยนแปลงในconstอินสแตนซ์เท่านั้นสั้น ๆ …
9 c++  const 

2
ความแตกต่างระหว่างตัวกำหนดคุณสมบัติ const ใน C และตัวคัดกรอง const ใน C ++ คืออะไร
ฉันพบความคิดเห็นของผู้ใช้R .. : C และ C ++ ไม่ใช่ภาษาเดียวกัน โดยเฉพาะอย่างยิ่ง, C constมีอะไรจะทำอย่างไรกับ C const++ ฉันรู้ว่าความแตกต่างอย่างหนึ่งระหว่างconstqualifier ใน C และconstqualifier ใน C ++ คือการลิงก์เริ่มต้น วัตถุที่ประกาศที่ขอบเขตเนมสเปซที่constมีตัวระบุใน C ++ มีการเชื่อมโยงภายในขณะที่ C วัตถุที่constมีตัวระบุที่ประกาศที่ขอบเขตทั่วโลก (โดยไม่ต้องมีตัวระบุstaticก่อนหน้าconst) จะมีการเชื่อมโยงภายนอก แต่พวกเขาต่างกันอย่างไรระหว่างภาษาของ C และ C ++ ฉันคิดว่าทั้งคู่มีแนวคิดและจุดประสงค์ในภาษาทั้งสองแบบเดียวกัน คำถามของฉัน: ความแตกต่างระหว่างตัวกำหนดคุณสมบัติ const ใน C และตัวคัดกรอง const ใน C ++ คืออะไร คำตอบของ"const" แตกต่างกันอย่างไรใน C และ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.