क्लैंग कंपाइलर स्निपेट के लिए चेतावनियों को उत्सर्जित करता है, जैसा कि here देखा जा सकता है।क्लैंग इन चेतावनियों को क्यों छोड़ता है?
clang++ -std=c++14 -O0 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp:1:18: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
main.cpp:1:29: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
2 warnings generated.
यह क्यों है?
void point(int = {1}, int = {2}) {}
int main(){
point();
}
जहां तक मेरा बता सकते हैं, {1}
और {2}
[dcl.fct.default]/1, [dcl.fct]/3 और [dcl.init]/1 के अनुसार पूरी तरह से वैध डिफ़ॉल्ट तर्क हैं।
struct example {
int member1;
int member2;
};
example x = { 1, 2 };
बजना आप कह रहा है कि ब्रेसिज़ के आपके उपयोग किसी एकल मान आरंभ के लिए "सामान्य" नहीं है:
ठीक है, यह केवल एक चेतावनी है, आईएमओ इसका मतलब है "अरे, यह बेकार है और अजीब लग रहा है, क्या आप वाकई यही मतलब है?"। – Quentin
@Quentin जैसा कि यह एक पूरी तरह से वैध कोड प्रतीत होता है, वहां कोई चेतावनी नहीं होनी चाहिए। –
बहुत सारे वैध स्निपेट हैं जो चेतावनियों को ट्रिगर करते हैं - अमान्य कोड त्रुटियों को ट्रिगर करता है। 'अगर (एक्स = कुछ()); 'एक और है। – Quentin