คำถามติดแท็ก ctor-initializer

5
สมาชิกชั้นอ้างอิง const ยืดอายุการใช้งานของชั่วคราวหรือไม่?
ทำไมสิ่งนี้: #include <string> #include <iostream> using namespace std; class Sandbox { public: Sandbox(const string& n) : member(n) {} const string& member; }; int main() { Sandbox sandbox(string("four")); cout << "The answer is: " << sandbox.member << endl; return 0; } ให้ผลลัพธ์จาก: คำตอบคือ: แทน: คำตอบคือ: สี่

6
การเริ่มต้นอาร์เรย์สมาชิกในตัวสร้างเริ่มต้น
class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; ฉันเชื่อว่าเหตุผลคืออาร์เรย์สามารถเริ่มต้นด้วย=ไวยากรณ์เท่านั้นนั่นคือ: int arr[3] = {1,3,4}; คำถาม ฉันจะทำสิ่งที่ต้องการได้อย่างไร (นั่นคือเริ่มต้นอาร์เรย์ในตัวสร้าง (ไม่ได้กำหนดองค์ประกอบในเนื้อความ)) เป็นไปได้หรือไม่? มาตรฐาน C ++ 03 พูดอะไรเป็นพิเศษเกี่ยวกับการเริ่มต้นการรวม (รวมถึงอาร์เรย์) ใน ctor initializers หรือไม่ หรือความไม่ถูกต้องของรหัสข้างต้นเป็นข้อพิสูจน์ของกฎอื่น ๆ ? รายการเริ่มต้น C ++ 0x …

1
การเริ่มต้นสมาชิกขณะใช้ตัวสร้างที่ได้รับมอบหมาย
ฉันได้เริ่มลองใช้มาตรฐาน C ++ 11 แล้วและฉันพบคำถามนี้ซึ่งอธิบายถึงวิธีการเรียก ctor ของคุณจาก ctor อื่นในคลาสเดียวกันเพื่อหลีกเลี่ยงการมีวิธีการเริ่มต้นหรือสิ่งที่คล้ายกัน ตอนนี้ฉันกำลังลองสิ่งเดียวกันกับรหัสที่มีลักษณะดังนี้: hpp: class Tokenizer { public: Tokenizer(); Tokenizer(std::stringstream *lines); virtual ~Tokenizer() {}; private: std::stringstream *lines; }; cpp: Tokenizer::Tokenizer() : expected('=') { } Tokenizer::Tokenizer(std::stringstream *lines) : Tokenizer(), lines(lines) { } แต่นี่ทำให้ฉันเกิดข้อผิดพลาด: In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’: /path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegationฉันได้ลองย้ายส่วน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.