चाहे false
परोक्ष सूचक लिए परिवर्तित किया जा करने की अनुमति दी है के बीच अलग है बजना ++ और जी ++:झूठी परोक्ष सूचक शून्य पर परिवर्तित
जी ++ - 4.8: हमेशा के साथ या -std = C++ 11
बिना एक चेतावनीक्लैंग ++ (ट्रंक): बिना चेतावनी अगर सीएस = सी ++ 11, और एक त्रुटि अगर -std = C++ 11
तो कोई भी जानता है कि क्यों g ++ और clang ++ अलग-अलग व्यवहार करते हैं, और कौन सही है? सी ++ मानक (सी ++ 03 और सी ++ 11 दोनों) में पैराग्राफ स्थिति के बारे में बात करते हैं।
धन्यवाद। साथ सी ++ 11 बजना
[hidden ~]$ cat b.cpp
const char* f() { return false; }
[hidden ~]$ g++ -c b.cpp
b.cpp: In function ‘const char* f()’:
b.cpp:1:26: warning: converting ‘false’ to pointer type ‘const char*’ [-Wconversion-null]
const char* f() { return false; }
^
[hidden ~]$ g++ -std=c++11 -c b.cpp
b.cpp: In function ‘const char* f()’:
b.cpp:1:26: warning: converting ‘false’ to pointer type ‘const char*’ [-Wconversion-null]
const char* f() { return false; }
^
[hidden ~]$ clang++ -c b.cpp
b.cpp:1:26: warning: initialization of pointer of type 'const char *' to null from a constant boolean expression [-Wbool-conversion]
const char* f() { return false; }
^~~~~
1 warning generated.
[hidden ~]$ clang++ -std=c++11 -c b.cpp
b.cpp:1:26: error: cannot initialize return object of type 'const char *' with an rvalue of type 'bool'
const char* f() { return false; }
^~~~~
1 error generated.
'clang ++ -std = C++ 03' क्या करता है? – zch
चेतावनी, बिना -std = C++ 11 –
जैसा ही मुझे आश्चर्य है कि यह सभी C++ की सी जड़ें नीचे नहीं आते हैं। सी ++ 03 सी 8 9 के साथ संगत है जिसमें कोई बूल प्रकार नहीं था और 'झूठा' और 'सत्य' केवल मैक्रोज़ होगा; हालांकि सी ++ 11 सी 11 के साथ संगत है जिसमें एक बूल प्रकार होता है और इस प्रकार यह 'झूठी' पर '0' के अन्य उपनाम के रूप में विचार करने के लिए समझ में आता है। –