Articles of c ++ 11

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

¿Qué tan cierto es “Want Speed? Pase por valor “

Corrígeme si estoy equivocado. Digamos que tengo: struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} … }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} … }; En el código de X , el name es obviamente una copia de cualquier argumento que pasó a X , X invoca el […]

Calcular la longitud de una cadena C en tiempo de comstackción. ¿Es esto realmente un constexto?

Estoy tratando de calcular la longitud de un literal de cadena en tiempo de comstackción. Para hacerlo, estoy usando el siguiente código: #include int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf(“%d %d”, length(“abcd”), length(“abcdefgh”)); } Todo funciona como se espera, el progtwig […]