Skopiuj inicjalizację nawiasów klamrowych konstruktora
„możemy inicjalizować obiekty klasy, dla której nie zdefiniowaliśmy żadnego konstruktora, używając:
inicjalizacja członkostwa.inicjalizacja kopiowania.domyślna inicjalizacja.Na przykład:
struct Work {
string author;
string name;
int year;
};
Work s9 { "Bethoven",
"Symphony No. 9 in D minor, Op. 125; Choral",
1824
}; // memberwise initialization
Work currently_playing {s9}; // copy initialization
Work none {}; // default initialization
The C ++ Programming Language 4th Ed. Rozdział 17.3.1
Na przykład:
struct Data
{
int mMember1;
float mMember2;
char mMember3;
};
int main()
{
Data aData_1{1,0.3,33};
Data aData_2{aData_1};
return EXIT_SUCCESS;
}
Musi to działać, chociaż otrzymuję błąd kompilatora w GCC tak samo jak w Clang. Błąd „Nie można konwertować danych na int” w obu kompilatorach. Jednak zaimplementowanie konstruktora kopiowania tego błędu znika lub nie wrzuca go, ale za pomocą składni nawiasów okrągłych. Problem jest trochę głupi i zmiana kręcenia dla okrągłych szelek rozwiązuje problem. Ale dlaczego zasady TC ++ PL nie są przestrzegane ?, czy jest to problem z kompilatorem, czy coś nie rozumiem ?. Z góry dziękuję.