Inspirado por mi pregunta anterior Un error común para los nuevos progtwigdores de C ++ es leer de un archivo con algo como: std::ifstream file(“foo.txt”); std::string line; while (!file.eof()) { file >> line; // Do something with line } A menudo informan que la última línea del archivo se leyó dos veces. La explicación común […]
A menudo, en SO (y en otros lugares) he visto la afirmación de que las notas y los ejemplos en el Estándar C ++ no son normativos; probablemente yo mismo lo he reclamado algunas veces. Sin embargo, no pude encontrar evidencia de este hecho en la especificación del lenguaje central del Estándar C ++ (en […]
Considere el siguiente progtwig: extern int x; auto x = 42; int main() { } Clang 3.5 lo acepta ( demostración en vivo ), GCC 4.9 y VS2013 no ( demostración en vivo para el primero ). ¿Quién tiene razón y dónde se especifica el comportamiento correcto en el Estándar C ++?
Estoy seguro de que este código debería ser ilegal, ya que claramente no funcionará, pero parece estar permitido por C ++ 0x FCD. class X { /* … */}; void* raw = malloc(sizeof (X)); X* p = new (raw) X(); // according to the standard, the RHS is a placement-new expression ::operator delete(p); // definitely […]
Fondo Considere para esta pregunta el siguiente código: #include namespace ns { struct foo { foo() : i(0) {} int i; private: foo(const foo&); // not defined, foo& operator=(const foo&); // non-copyable }; void swap(foo& lhs, foo& rhs) { std::swap(lhs.i, rhs.i); } } template void do_swap(T& lhs, T& rhs); // implementation to be determined int […]
El estándar C99 dice en $ 6.5.2. Entre el punto de secuencia anterior y siguiente, un objeto tendrá su valor almacenado modificado a lo sumo por la evaluación de una expresión. Además, el valor anterior se leerá solo para determinar el valor que se almacenará . (énfasis por mí) Sigue diciendo que el siguiente ejemplo […]
Tengo el código: class A { public: A() = default; private: int i = 1; }; int main() { const A a; return 0; } Comstack bien en g ++ (ver ideone ), pero falla en clang ++ con error: la inicialización predeterminada de un objeto de tipo const ‘const A’ requiere un constructor predeterminado […]
No soy tan versado en el estándar C, así que por favor tengan paciencia conmigo. Me gustaría saber si está garantizado, según el estándar, que memcpy(0,0,0) es seguro. La única restricción que pude encontrar es que si las regiones de memoria se superponen, entonces el comportamiento no está definido … Pero, ¿podemos considerar que las […]
Me sorprende descubrir accidentalmente que los siguientes trabajos: #include int main(int argc, char** argv) { struct Foo { Foo(Foo& bar) { std::cout << &bar << std::endl; } }; Foo foo(foo); // I can't believe this works… std::cout << &foo << std::endl; // but it does… } Estoy pasando la dirección del objeto construido en su […]
Considere la siguiente statement: *((char*)NULL) = 0; //undefined behavior Claramente invoca un comportamiento indefinido. ¿La existencia de dicha afirmación en un progtwig dado significa que todo el progtwig no está definido o que el comportamiento solo se vuelve indefinido una vez que el flujo de control llega a esta afirmación? ¿El progtwig siguiente estaría bien […]