คำถามติดแท็ก qualified-name

3
ชื่อคลาสที่ผ่านการรับรองโดยสมบูรณ์ถึงขอบเขตทั่วโลกที่จำเป็นสำหรับคำจำกัดความของฟังก์ชั่นสมาชิกนอกบรรทัดหรือไม่?
คำถามนี้ทำให้ฉันสงสัยว่ามันมีประโยชน์ / จำเป็นสำหรับชื่อคลาสที่มีคุณสมบัติครบถ้วน (รวมถึงตัวดำเนินการขอบเขตทั่วโลก) ในนิยามฟังก์ชันฟังก์ชันสมาชิกนอกคลาสหรือไม่ ในมือข้างหนึ่งฉันไม่เคยเห็นสิ่งนี้มาก่อน (และไวยากรณ์ในการทำอย่างถูกต้องดูเหมือนคลุมเครือ) ในอีกด้านหนึ่งการค้นหาชื่อ C ++ นั้นไม่ใช่เรื่องเล็กน้อยดังนั้นอาจมีกรณีเล็ก ๆ น้อย ๆ คำถาม: มีกรณีที่แนะนำคำนิยามฟังก์ชั่นสมาชิกนอกคลาสโดย ReturnType (::Fully::Qualified::Class::Name::MemberFunctionName)(...) { ... } จะแตกต่างจาก ReturnType Fully::Qualified::Class::Name::MemberFunctionName(...) { ... }(ไม่มี::คำนำหน้าขอบเขตทั่วโลก)? โปรดทราบว่าคำจำกัดความของฟังก์ชันสมาชิกจะต้องใส่ไว้ในเนมสเปซที่ล้อมรอบคลาสดังนั้นนี่ไม่ใช่ตัวอย่างที่ถูกต้อง

2
ทำ Derived1 :: ฐานและ Derived2 :: ฐานอ้างถึงชนิดเดียวกันหรือไม่
MSVC, Clang และ GCC ไม่เห็นด้วยกับรหัสนี้: struct Base { int x; }; struct Der1 : public Base {}; struct Der2 : public Base {}; struct AllDer : public Der1, public Der2 { void foo() { Der1::Base::x = 5; } }; Godbolt GCC: <source>: In member function 'void AllDer::foo()': <source>:10:21: error: 'Base' …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.