संभव डुप्लिकेट:
std::string x(x);आप जिस ऑब्जेक्ट को बना रहे हैं उसमें आप एक प्रतिलिपि बनाने वाले को कॉपी कर सकते हैं? (C++) (जीसीसी)
class A {};
int main() {
A a(a);
}
यह संकलित करता है।
जीसीसी (जीसीसी) 4.7.2 20,120,921 (रेड हैट 4.7.2-2)
g++ -o main main.cpp -Wall -w -ansi
मुझे कोई चेतावनियां प्राप्त हुईं।
यह वैध C++ क्यों प्रतीत होता है?
क्या यह मानक में कहीं भी उल्लेख किया गया है?
क्या चेतावनी झंडे हैं जो जीसीसी के लिए इसकी रिपोर्ट कर सकते हैं?
जब कक्षा के सदस्य डेटा होते हैं, तो डेटा यादृच्छिक रूप से समाप्त होता है।
उदाहरण:
#include <iostream>
class A {
public:
int i;
A() : i{6} {}
};
int main() {
A a(a);
std::cout << a.i << '\n';
}
उत्पादन: -482728464
यहाँ क्या हो रहा है? इसके अलावा, मैं खुद को गलती से ऐसा करने से कैसे रोक सकता हूं? - क्या यह एक कंपाइलर त्रुटि बनाना संभव है?
सरल उदाहरण, 'int i = i;' नोट करें। – GManNickG
क्लैंग 3.2 ने हाल ही में ऐसे मामलों का पता लगाने के लिए अपने एल्गोरिदम की समीक्षा की है, आप [uninitialized.cpp] (http://llvm.org/svn/llvm-project/cfe/trunk/test/SemaCXX/uninitialized.cpp) फ़ाइल देख सकते हैं टेस्ट सूट से सभी मामलों को देखने के लिए जिसमें यह चेतावनी देता है। ध्यान रखें कि जीसीसी के साथ, * अनियमित * चेतावनियां संभावित रूप से अनुकूलन स्तर से बंधी हुई हैं और केवल 'ओ 1' या 'ओ 2' बिल्डों के लिए ट्रिगर की जा सकती हैं। –