Wpis z mikrobloga

Zauważyłem, że od pewnej wersji gcc działa mi coś, co teoretycznie nie powinno. Kompilator dopuszcza inicjowanie wartości zmiennej tak jak w Javie, zamiast na liście inicjalizacyjnej konstruktora. Tak więc:

class MyClass
{
int memeber = 0;
};

w wersji g++ 4.7.2 kompiluje się, a w wersji 4.6.X nie.
Wie ktoś coś o tym? To jakiś nowy bajer w C++11? Bardzo nie mam czasu tego sam sprawdzić (sesja), a chciałbym się dowiedzieć.
#programowanie #cpp
  • 4
@Onoki: W C++11.

Zobacz sobie w standardzie sekcję 8.5.15 (Declarators, Initializers).

W praktyce jest to zaimplementowane tak, że jest taki dodatkowy konstruktor, który odpala się przed właściwym i inicjalizuje pola zainicjalizowane jako T t(value), T t{value}, T t = value. Jeśli chodzi o wydajność, to nie ma to żadnego narzutu.

Nie można tego używać do statycznych pól, które nie są "integral type" czy constexpr, bo one "mieszkają" w