Articles of initializer list

¿Cómo inicializo una matriz miembro con una initializer_list?

Me estoy poniendo al día con C ++ 0x y estoy probando cosas con g ++ 4.6 Acabo de probar el siguiente código, pensando que funcionaría, pero no comstack. Me sale el error: incompatible types in assignment of ‘std::initializer_list’ to ‘const int [2]’ struct Foo { int const data[2]; Foo(std::initializer_list& ini) : data(ini) {} }; […]

Son mutaciones múltiples de la misma variable dentro del inicializador que enumeran el comportamiento indefinido antes de C ++ 11

Considera el siguiente código: int main() { int count = 0 ; int arrInt[2] = { count++, count++ } ; return 0 ; } Si clang -std=c++03 el código usando clang -std=c++03 produce la siguiente advertencia ( ejemplo en vivo ): warning: multiple unsequenced modifications to ‘count’ [-Wunsequenced] int arrInt[2] = { count++, count++ } […]

¿Las mutaciones múltiples dentro del inicializador enumeran el comportamiento indefinido?

Tengo curiosidad sobre las listas de inicializadores y los puntos de secuencia. Hace un tiempo leí que el orden de evaluación en las listas de inicializadores es de izquierda a derecha. Si eso es así, entonces debe haber algún tipo de punto de secuencia entre los puntos de evaluación, ¿estoy equivocado? ¿Entonces con eso dicho […]

Inicializando una matriz miembro en el inicializador del constructor

class C { public: C() : arr({1,2,3}) //doesn’t compile {} /* C() : arr{1,2,3} //doesn’t compile either {} */ private: int arr[3]; }; Creo que la razón es que las matrices solo se pueden inicializar con la syntax = , es decir: int arr[3] = {1,3,4}; Preguntas ¿Cómo puedo hacer lo que quiero hacer (es […]

initializer_list y tipo de plantilla deducción

Considera la función: template void printme(T&& t) { for (auto i : t) std::cout << i; } o cualquier otra función que espere un parámetro con un tipo begin () / end () – enabled. ¿Por qué es ilegal lo siguiente? printme({‘a’, ‘b’, ‘c’}); Cuando todos estos son legítimos: printme(std::vector({‘a’, ‘b’, ‘c’})); printme(std::string(“abc”)); printme(std::array {‘a’, […]

Listas de inicializadores y RHS de operadores

No entiendo por qué las listas de inicializadores no se pueden usar en el RHS de un operador. Considerar: class foo { }; struct bar { template bar(T const&…) { } }; foo& operator<<(foo& f, bar const&) { return f; } int main() { foo baz; baz << {1, -2, "foo", 4, 5}; return 0; […]

initializer_list y semántica de movimiento

¿Puedo mover elementos de std::initializer_list ? #include #include template void foo(std::initializer_list list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Como std::intializer_list requiere atención especial del comstackdor y no tiene semántica de valores como los contenedores normales de la biblioteca estándar de C ++, prefiero estar a […]