Articles of c ++ 11

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

¿Cómo implementar la función make_unique en C ++ 11?

Mi comstackdor no es compatible con make_unique. Cómo escribir uno? template unique_ptr make_unique( Args&&… args );

Bind Vs Lambda?

Tengo una pregunta sobre qué estilo es el preferido: std :: bind Vs lambda en C ++ 0x. Sé que sirven, de alguna manera, diferentes propósitos, pero tomemos un ejemplo de funcionalidad que se cruza. Usando lambda : uniform_int distribution(1, 6); mt19937 engine; // lambda style auto dice = [&]() { return distribution(engine); }; Usando […]

Comprobando que existe un miembro, posiblemente en una clase base, versión C ++ 11

En https://stackoverflow.com/a/1967183/134841 , se proporciona una solución para comprobar estáticamente si un miembro existe, posiblemente en una subclase de un tipo: template class has_resize_method { class yes { char m;}; class no { yes m[2];}; struct BaseMixin { void resize(int){} }; struct Base : public Type, public BaseMixin {}; template class Helper{}; template static no […]

¿Hay algún caso en que una devolución de una referencia de RValue (&&) sea útil?

¿Hay alguna razón por la cual una función debería devolver una Referencia de RValue ? Una técnica, o truco, o una expresión idiomática o un patrón? MyClass&& func( … ); Soy consciente del peligro de devolver referencias en general, pero a veces lo hacemos de todos modos, ¿no? ( T& T::operator=(T) es solo un ejemplo […]

¿Quitar el elemento del vector, mientras que en el rango de C ++ 11 ‘for’ loop?

Tengo un vector de IInventory *, y estoy recorriendo la lista usando el rango de C ++ 11, para hacer cosas con cada uno. Después de hacer algunas cosas con una, es posible que desee eliminarlo de la lista y eliminar el objeto. Sé que puedo llamar delete en el puntero en cualquier momento para […]

“Downcasting” unique_ptr a unique_ptr

Tengo una serie de fábricas que devuelven unique_ptr . Sin embargo, bajo el capó están proporcionando punteros a varios tipos derivados, es decir, unique_ptr , unique_ptr , unique_ptr etc. Dado DerivedA : Derived y Derived : Base que tendríamos: unique_ptr DerivedAFactory() { return unique_ptr(new DerivedA); } Lo que tengo que hacer es “convertir” el puntero […]

¿Cuáles son las reglas para la generación automática de operaciones de movimiento?

En C ++ 98, el comstackdor de C ++ podría generar automáticamente el constructor de copias y el operador de asignación de copias a través de una copia de miembros, por ejemplo struct X { std::string s; std::vector v; int n; }; El comstackdor genera automáticamente el constructor de copias y el operador de asignación […]

¿Qué significa thread_local en C ++ 11?

Estoy confundido con la descripción de thread_local en C ++ 11. Según entiendo, cada hilo tiene una copia única de variables locales en una función. Se puede acceder a las variables globales / estáticas por todos los hilos (posiblemente acceso sincronizado usando lockings). ¿Y las variables thread_local son visibles para todos los hilos, pero solo […]