Articles of language lawyer

¿Cuál es la verdadera razón para no usar el bit EOF como nuestra condición de extracción de flujo?

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

¿Son las notas y ejemplos en la especificación del lenguaje central del Estándar C ++ no normativo?

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

¿Una statement que utiliza “auto” coincide con una statement externa que utiliza un especificador de tipo concreto?

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 ++?

Legalidad del uso de la eliminación del operador en un puntero obtenido de la colocación nueva

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

¿Cambia C ++ 11 el comportamiento de llamar explícitamente a std :: swap para garantizar que se encuentren intercambios ubicados en ADL, como boost :: swap?

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

Comportamiento definido para expresiones

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

¿Realmente necesito implementar un constructor proporcionado por el usuario para objetos const?

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

¿Se garantiza que sea seguro realizar memcpy (0,0,0)?

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

¿Es legal pasar un objeto C ++ a su propio constructor?

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

¿Se puede suponer que las twigs con comportamiento indefinido son inalcanzables y optimizadas como código muerto?

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