Articles of c ++ 11

¿Cuándo usar el inicializador incluido?

En C ++ 11, tenemos esa nueva syntax para inicializar las clases, lo que nos da un gran número de posibilidades para inicializar las variables. { // Example 1 int b(1); int a{1}; int c = 1; int d = {1}; } { // Example 2 std::complex b(3,4); std::complex a{3,4}; std::complex c = {3,4}; auto […]

¿Es esta recursión infinita UB?

En C ++ 11, como un bucle infinito sin efectos secundarios, el siguiente progtwig es UB: int main() { while (true) {} } ¿Es el siguiente también UB? void foo() { foo(); } int main() { foo(); } Las citas del estándar para ambos progtwigs serían ideales.

¿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 […]

¿El movimiento deja el objeto en un estado utilizable?

Digamos que tengo dos vectores y muevo uno hacia el otro, v1 = std::move(v2) ; v2 todavía estará en un estado utilizable después de esto?

constexpr e inicialización de un puntero estático de const void con reinterpretar elenco, ¿qué comstackdor está en lo cierto?

Considere la siguiente pieza de código: struct foo { static constexpr const void* ptr = reinterpret_cast(0x1); }; auto main() -> int { return 0; } El ejemplo anterior comstack bien en g ++ v4.9 ( demostración en vivo ), mientras que no puede comstackrse en clang v3.4 ( demostración en vivo ) y genera el […]

C ++ 11: Corregir la inicialización de std :: array?

Si inicializo un std :: array de la siguiente manera, el comstackdor me da una advertencia acerca de los paréntesis faltantes std::array a = {1, 2, 3, 4}; Esto soluciona el problema: std::array a = {{1, 2, 3, 4}}; Este es el mensaje de advertencia: missing braces around initializer for ‘std::array::value_type [4] {aka int [4]}’ […]

Plantilla de función variable con expansión de paquete no en el último parámetro

Me pregunto por qué el siguiente código no se comstack: struct S { template S(T…, int); }; S c{0, 0}; Este código no se puede comstackr tanto con clang como con GCC 4.8. Aquí está el error con clang: test.cpp:7:3: error: no matching constructor for initialization of ‘S’ S c{0, 0}; ^~~~~~~ test.cpp:4:5: note: candidate […]

orden de evaluación de operandos

En la expresión a + b , ¿se garantiza que se evaluará antes de b , o no se especifica el orden de evaluación? Creo que es lo último, pero me cuesta encontrar una respuesta definitiva en el estándar. Como no sé si C maneja esto diferente de C ++, o si las reglas de […]

Asignación de memoria alineada dinámica en C ++ 11

posix_memalign y _aligned_malloc en Windows permiten asignar dinámicamente un trozo de memoria alineado. ¿Hay algo similar en C ++ 11? Hasta donde yo sé, la palabra clave alignas solo funciona con objetos asignados estáticamente.

¿Cuándo se pasa la sobrecarga por referencia (l-value y r-value) a pass-by-value?

Lo he visto decir que un operator= escrito para tomar un parámetro del mismo tipo por valor sirve como operador de asignación de copia y operador de asignación de movimiento en C ++ 11: Foo& operator=(Foo f) { swap(f); return *this; } Donde la alternativa sería más del doble de líneas con mucha repetición de […]