Articles of c ++ faq

¿Cuándo hacer un tipo no movible en C ++ 11?

Me sorprendió que esto no apareciera en mis resultados de búsqueda, pensé que alguien habría preguntado esto antes, dada la utilidad de la semántica de movimientos en C ++ 11: ¿Cuándo tengo que (o es una buena idea para mí) hacer una clase no móvil en C ++ 11? (Razones distintas de los problemas de […]

¿Cuándo los paréntesis adicionales tienen un efecto, que no sea la precedencia del operador?

Los paréntesis en C ++ se usan en muchos lugares: por ejemplo, en llamadas a funciones y expresiones de agrupación para anular la precedencia del operador. Además de los paréntesis extra ilegales (como las listas de argumentos de llamadas a funciones), una regla general -pero no absoluta- de C ++ es que los paréntesis adicionales […]

¿Cómo evito que se asigne una clase a través del operador ‘nuevo’? (Me gustaría asegurar que mi clase RAII siempre esté asignada en la stack).

Me gustaría asegurar que mi clase RAII siempre esté asignada en la stack. ¿Cómo evito que se asigne una clase a través del operador ‘nuevo’?

Justificación de obligar a algunos operadores a ser miembros

Hay 4 operadores en C ++ que pueden estar sobrecargados pero no pueden sobrecargarse como funciones independientes (también conocidas como no miembros, independientes). Estos operadores son: operator = operator () operator -> operator [] Este hilo explica perfectamente la razón detrás de prohibir operator = ser una función no miembro. Alguna idea sobre los otros […]

Preguntas frecuentes: ¿Por qué dynamic_cast solo funciona si una clase tiene al menos 1 método virtual?

Esto no se comstack en C ++: class A { }; class B : public A { }; … A *a = new B(); B *b = dynamic_cast(a);

¿Por qué realmente necesitamos herencia Privada o Protegida en C ++?

En C ++, no puedo pensar en un caso en el que me gustaría heredar privado / protegido de una clase base: class Base; class Derived1 : private Base; class Derived2 : protected Base; ¿Es realmente útil?

Pasar punteros compartidos como argumentos

Si declaro un objeto envuelto en un puntero compartido: std::shared_ptr myClassObject(new myClass()); entonces quería pasarlo como argumento a un método: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr arg1) { arg1->someField = 4; } ¿Lo anterior simplemente incrementa el recuento de referencias de shared_pt y todo está bien? ¿O deja un puntero colgando? ¿Todavía se supone que […]

¿Debo incluir o en progtwigs C ++?

¿Qué debería incluir en los progtwigs C ++, stdio.h o cstdio ? ¿y por qué? ¿Por qué dos archivos de encabezado que proporcionan la misma funcionalidad? ¿Qué dice la norma con respecto a esto? ¿Cómo debería incluir otros encabezados similares? ¿Existe alguna regla base que deba seguir?

¿Std :: list :: remove método llama destructor de cada elemento eliminado?

std::list lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); ¿Std :: list :: remove method call destructor (y memoria libre) de cada elemento eliminado? Si es así, ¿cómo puedo evitarlo?

¿Por qué los miembros de mi estructura no se inicializan correctamente con `{}`?

Tenía el siguiente código: #include struct T { int a, b, c; }; int main() { T t = {0}; std::cout << ta << ',' << tb << ',' << tc << '\n'; } Salida : 0,0,0 Después de muchos años de que este código funcionara felizmente en un entorno de producción crítico, cumpliendo una […]