Articles of c ++ 11

Mezcla de C ++ 11 atómica y OpenMP

OpenMP tiene su propio soporte para el acceso atómico, sin embargo, hay al menos dos razones para preferir Cómica 11 atómica: son significativamente más flexibles y son parte del estándar. Por otro lado, OpenMP es más poderoso que la biblioteca de hilos C ++ 11. El estándar especifica la biblioteca de operaciones atómicas y la […]

Mover constructor para std :: mutex

Muchas clases en la biblioteca estándar de c ++ ahora tienen constructores de movimiento, por ejemplo – thread::thread(thread&& t) Pero parece que std :: mutex no. Entiendo que no pueden copiarse, pero parece tener sentido poder devolver uno de una función “make_mutex”, por ejemplo. (No digo que sea útil, solo que tiene sentido) ¿Hay alguna […]

¿Cómo usar la syntax de inicialización uniforme de C ++ 11?

No puedo entender cuándo y cómo usar la nueva syntax de inicialización uniforme en C ++ 11. Por ejemplo, entiendo esto: std::string a{“hello world”}; // OK std::string b{a}; // NOT OK ¿Por qué no funciona en el segundo caso? El error es: error: no matching function for call to ‘std::basic_string::basic_string()’ con esta versión de g […]

C ++ concat dos literales de cadenas `const char`

¿Es posible combinar dos cadenas literales usando un constexpr ? O reformulado puede uno eliminar macros en código como: #define nl(str) str “\n” int main() { std::cout << nl("usage: foo") nl("print a message") ; return 0; } Actualización : no hay nada de malo con el uso de “\n” , sin embargo, me gustaría saber […]

¿Por qué no se puede inicializar de manera simple (con llaves) 2D std :: array?

Posible duplicado: c ++ por qué el comportamiento de initializer_list para std :: vector y std :: array son diferentes Definí una matriz 2D simple (3X2): std::array<std::array,2> a { {1,2,3}, {4,5,6} }; Me sorprendió que esta inicialización no funcione, con el error gcc4.5: too many initializers for ‘std::array<std::array, 2u>’ ¿Por qué no puedo usar esta […]

¿Por qué mi plantilla no acepta una lista de inicializadores?

He creado una plantilla de la siguiente manera template void f(T const& t) { } Quería que esto se pueda llamar por contenedores pero también por listas de inicializadores. Pensé que sería initializer_list , cuando se llama de la siguiente manera. f({1, 2, 3}); Pero GCC se comporta como si no cumpliera con los estándares […]

Diferencia entre std :: regex_match & std :: regex_search?

Debajo del progtwig se ha escrito para obtener la información del “Día” usando C ++ 11 std :: regex_match & std :: regex_search . Sin embargo, usar el primer método devuelve false y el segundo método devuelve true (esperado). Leí la documentación y la pregunta SO ya existente relacionada con esto, pero no entiendo la […]

¿Qué garantiza la biblioteca estándar sobre la asignación de movimiento automático?

¿Qué dice el estándar C ++ 11 sobre la asignación del movimiento personal en relación con la biblioteca estándar? Para ser más concretos, ¿qué se garantiza, en todo caso, sobre lo que hace selfAssign ? template std::vector selfAssign(std::vector v) { v = std::move(v); return v; }

comprobar los parámetros de las plantillas variadic para la singularidad

Quiero que los parámetros de la plantilla varíen únicos. Sé cuando herencia múltiple, herencia de clases idéntica no está permitida. struct A{}; struct B: A, A{}; // error Usando esta regla, hice un pequeño código. #include template struct id{}; template struct base_all : id … {}; template struct is_unique { template static constexpr bool test( […]

¿Por qué no se permite modificar una cadena a través de un puntero recuperado a sus datos?

En C ++ 11, los caracteres de una std::string deben almacenarse contiguamente, como lo indica el § 21.4.1 / 5: Los objetos tipo char en un objeto basic_string se deben almacenar contiguamente. Es decir, para cualquier objeto basic_string s, la identidad & * (s.begin () + n) == & * s.begin () + n se […]