¿Hay una regla de oro para decidir cuándo utilizar la sintaxis de edad ()
en lugar de la nueva sintaxis {}
?Inicialización uniforme en C++ 0x, cuándo usar() en lugar de {}?
Para inicializar una estructura:
struct myclass
{
myclass(int px, int py) : x(px), y(py) {}
private:
int x, y;
};
...
myclass object{0, 0};
Ahora bien, en el caso de un vector
por ejemplo, que tiene muchos constructores. Siempre hago lo siguiente:
vector<double> numbers{10};
consigo un vector de elemento en lugar de uno con elementos como uno de los constructores es:
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
Mi sospecha es que cada vez que una class define un constructor initializer list
como en el caso de un vector, se llama con la sintaxis {}
.
Entonces, es lo que estoy pensando es correcto. es decir, ¿Debería volver a la sintaxis anterior solo cuando una clase defina un constructor de listas de inicializadores para llamar a un constructor diferente? p. Ej. para corregir el código anterior:
vector<double> numbers(10); // 10 elements instead of just one element with value=10
¿Eso significa que se pueden romper los clientes de una clase al agregar constructores de lista de inicializadores? Ay. –
No, el constructor del inicializador no afecta a los otros constructores en su lugar AFAIK. –
@dribeas: ¿Eso es cierto? Supongamos que su clase tiene inicialmente un constructor que toma un solo argumento int y crea felizmente instancias con la nueva sintaxis. Si se agrega un nuevo constructor que toma 'initializer_list', ¿no estarían todos esos objetos usando el constructor agregado? A menos que los ejemplos en la red estén desactualizados y declarar que un vector con la lista debería verse como 'vector v {{2, 1}};' No veo corchetes que vayan a ninguna parte. –
UncleBens