ile başlatılırken daraltma konusunda uyarı yok Açık bir daraltma dönüşümü bulduğum şaşırtıcı bir duruma düştüm, ancak derleyici (gcc-4.7.2) -Wall -Wnarrowing -pedantic
bayraklarına rağmen bir uyarı vermediği için hayal kırıklığına uğradım. Aşağıdaki programa bakınız: a1
aitParantezler
struct A {
int m;
A(int m) : m(m) {};
};
int main() {
unsigned long v = 0;
A a1(v); // narrowing, but no warning (should this not cause a warning?)
A a2{v}; // narrowing, warning raised (expected)
}
Başlatma derleyici dikizlemek kadar olmadan sinek gibi görünüyor. Sadece delirmediğimden emin olmak için, a1
'u aynı şekilde başlatmayı denedim, ancak parantez yerine parantez ile. Derleyici, beklendiği gibi ikinci durumda daraltma konusunda uyarıyor.
Açık olmak gerekirse: Başlatma listelerindeki daraltma dönüşümlerinin yasallığını sormuyorum. Bunun yasal olmadığını biliyorum - a2
'un kıvrımlı şekilde başlatılması sadece bir akıl-kontrolüydü. Sorumun başlangıç listeleri ile ilgisi yoktur. Bu yinelenen bir soru değil.
derleyici a1
başlatılmasına yönelik daralma beni uyarmaya gerekmez mi?
"a1" için yapıcı bir örtük dönüştürme yapabilir, "a2" ise bunu yapamaz. Neden aynı olmaları gerektiğini düşünüyorsun? –
'-Wconversion 'bayrağını eklerseniz ne olur? –
Bu bir kopya değil. Başlatma listelerindeki dönüşümlerin daraltılmasının yasa dışı olduğunu zaten biliyordum. Ben parantez ile başlangıç hakkında soruyorum. –