Czy istnieje zasada, aby zdecydować, kiedy użyć starej składni ()
zamiast nowej składni {}
?Jednolita inicjalizacja w C++ 0x, kiedy użyć() zamiast {}?
Aby zainicjować struct:
struct myclass
{
myclass(int px, int py) : x(px), y(py) {}
private:
int x, y;
};
...
myclass object{0, 0};
Teraz w przypadku vector
na przykład, ma wiele konstruktorów. Ilekroć wykonaj następujące czynności:
vector<double> numbers{10};
dostaję wektor elementu zamiast jednego z elementów jako jeden z konstruktorów jest:
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
Podejrzewam, że ilekroć Klasa definiuje konstruktor initializer list
, podobnie jak w przypadku wektora, wywoływana jest ze składnią {}
.
Czyli to jest prawidłowe. tj. Czy powinienem powrócić do starej składni tylko wtedy, gdy klasa definiuje konstruktor listy inicjalizatorów, aby wywoływał inny konstruktor? np. skorygować powyższy kod:
vector<double> numbers(10); // 10 elements instead of just one element with value=10
Czy to oznacza, że można łamać klientów klas podczas dodawania konstruktorów listy inicjalizatorów? Oooo. –
Nie, konstruktor inicjatora nie ma wpływu na inne konstruktory w miejscu AFAIK. –
@dribeas: Czy to pewne. Załóżmy, że twoja klasa ma początkowo konstruktor, który przyjmuje pojedynczy argument int i z przyjemnością tworzysz instancje z nową składnią. Jeśli zostanie dodany nowy konstruktor, który pobiera 'initializer_list', czy wszystkie te obiekty nie będą teraz używać dodanego konstruktora? Dopóki przykłady w sieci nie są aktualne i deklaracja wektora z listą powinna wyglądać jak wektor ' v {{2, 1}};' Nie widzę żadnych nawiasów. –
UncleBens