Articles of c ++ 11

Tabla de búsqueda con constexpr

Estoy buscando crear una tabla de coordenadas de búsqueda, algo así como: int a[n][2] = {{0,1},{2,3}, … } Para un n dado, se creará en tiempo de comstackción. Empecé a buscar en constexpr , pero parece una función que devuelve un constexpr std::vector<std::array > no es una opción, como lo consigo: invalid return type ‘std::vector<std::array […]

La lista de inicializadores C ++ 11 falla, pero solo en listas de longitud 2

¡Localicé un oscuro error de registro al hecho de que las listas de inicializadores de longitud 2 parecen ser un caso especial! ¿Cómo es esto posible? El código fue comstackdo con Apple LLVM versión 5.1 (clang-503.0.40), usando CXXFLAGS=-std=c++11 -stdlib=libc++ . #include #include #include using namespace std; typedef vector Strings; void print(string const& s) { printf(s.c_str()); […]

Volátil en C ++ 11

En el estándar C ++ 11, el modelo de la máquina cambió de una máquina de un solo hilo a una máquina de múltiples hilos. ¿Esto significa que la típica static int x; void func() { x = 0; while (x == 0) {} } static int x; void func() { x = 0; while […]

¿Cómo se implementa std :: function?

De acuerdo con las fonts que he encontrado, una expresión lambda es implementada esencialmente por el comstackdor creando una clase con un operador de llamada de función sobrecargado y las variables referenciadas como miembros. Esto sugiere que el tamaño de las expresiones lambda varía, y dadas las suficientes referencias de variables, ese tamaño puede ser […]

decltype y paréntesis

No entiendo la última línea del ejemplo en la página 148 del FCD (§7.6.1.2 / 4): const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) […]

¿Por qué utilizar funciones de inicio y fin que no son miembros en C ++ 11?

Cada contenedor estándar tiene un método de begin y end para devolver iteradores para ese contenedor. Sin embargo, C ++ 11 aparentemente ha introducido funciones gratuitas llamadas std::begin y std::end que llaman a las funciones de miembro de begin y end . Entonces, en lugar de escribir auto i = v.begin(); auto e = v.end(); […]

¿Qué significa auto && decirnos?

Si lees código como auto&& var = foo(); donde foo es cualquier función que retorna por valor de tipo T Entonces var es un valor l de referencia de tipo rvalue a T Pero, ¿qué implica esto para var ? ¿Significa que estamos autorizados a robar los recursos de var ? ¿Hay situaciones razonables en […]

¿Qué es std :: promise?

Estoy bastante familiarizado con std::future componentes std::thread , std::async y std::future C ++ 11 (por ejemplo, vea esta respuesta ), que son sencillos. Sin embargo, no puedo entender qué es la std::promise , qué hace y en qué situaciones se usa mejor. El documento estándar en sí no contiene una gran cantidad de información más […]

¿Cómo hacer cálculos generics sobre paquetes de argumentos heterogéneos de una función de plantilla variadica?

PREMISA: Después de jugar un poco con las plantillas variadic un poco, me di cuenta de que lograr algo que vaya un poco más allá de las tareas de meta-progtwigción triviales pronto se vuelve bastante engorroso. En particular, me encontré deseando una forma de realizar operaciones genéricas sobre un paquete de argumentos como iterar , […]

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