language-lawyer

Does 'sizeof' * really * evaluate to a 'std:: size t'? ¿Puede?

Tome el siguiente pasaje estándar: [C++11: 5.3.3/6]: El resultado de sizeof y sizeof... es una constante de tipo std::si ... laro, los dos son uno y el mismo si std::size_t es un alias de tipo, pero, de nuevo, en ninguna parte es realmente necesario.

¿Se han cambiado las reglas para los constructores protegidos en C++17?

Tengo este caso de prueba: struct A{ protected: A(){} }; struct B: A{}; struct C: A{ C(){} }; struct D: A{ D() = default; }; ... or FITNESS FOR A PARTICULAR PURPOSE. ¿Es este cambio de comportamiento parte de C++17 o es un error en ambos compiladores?

Usar 'throw`' en una excepción modificada

Tengo una función foo que puede lanzar una excepción bar. En otra función llamo a foo pero tengo la capacidad de agregar un ... ficar, pero me preocupa tropezar con una construcción no especificada o indefinida, así que me gustaría saberlo con certeza).

Devolver tipo vacío en C y C++

Esto compila sin ninguna advertencia. ¿Es esto legal en C y C++ o solo funciona en gcc y clang? Si es legal, ¿es algo nuev ... t("Step 2 - No Memory"); case 1: return error_report("Step 2 - Internal Error"); } printf("Processing Done!\n"); }

¿Por qué a veces no es necesario capturar una variable const en una lambda?

Considere el siguiente ejemplo: #include <cstdlib> int main() { const int m = 42; [] { m; }(); // OK co ... falla con un error en ambos casos (variable 'm' cannot be implicitly captured in a lambda with no capture-default specified).

¿Podría una implementación de C++, en teoría, paralelizar la evaluación de dos argumentos de función?

Dada la siguiente llamada a la función: f(g(), h()) Dado que el orden de evaluación de los argumentos de función no está ... e afirma lo contrario; sin embargo, no cita el estándar, y mi lectura de [expr.call] no ha revelado ninguna redacción obvia.)

¿Enmascarar antes del cambio a la izquierda sin signo en C/C++ es demasiado paranoico?

Esta pregunta está motivada por mí implementando algoritmos criptográficos (por ejemplo, SHA-1) en C/C++, escribiendo código ... que la nueva lógica no se traduzca en rotación de bits, lo que significa que ahora se realizan 4 operaciones en lugar de 1.

¿Cuándo es válido acceder a un puntero a un objeto "muerto"?

Primero, para aclarar, estoy no hablando de desreferenciar punteros inválidos! Considere los dos ejemplos siguientes. Ejem ... he citado el estándar C99 anterior, me interesaría saber si el comportamiento difiere en cualquiera de los estándares de C++.

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

No estoy tan bien versado en el estándar C, así que por favor tengan paciencia conmigo. Me gustaría saber si está garantizad ... onen, entonces el comportamiento es indefinido... Pero, ¿podemos considerar que las regiones de memoria se superponen aquí ?

¿Está bien definido el valor std::is unsigned:?

Me pregunto si std::is_unsigned<bool>::value Está bien definido de acuerdo con el estándar o no? Hago la pregunta porque typename std::make_unsigned<bool>::type no está bien definido.

¿Por qué es un punto y coma doble un SyntaxError en Python?

Sé que los puntos y comas son innecesarios en Python, pero se pueden usar para meter varias sentencias en una sola línea, por ... sado que la declaración entre punto y coma fue tratada como un vacío line, un no-op. Aparentemente no. ¿Por qué es un error?

Si se declaran dos objetos en una sola línea, ¿en qué orden se construyen?

Digamos que una clase ha sido definida como class A { //..... }; Y ahora estoy creando dos objetos como A a,b; ¿En qué orden se crean a y b? ¿Está definido por el estándar?

¿Puede el uso de una lambda en archivos de encabezado violar el ODR?

Se puede escribir lo siguiente en un archivo de encabezado: inline void f () { std::function<void ()> func = [] {}; } ... nable de hacer? ¿El segundo ejemplo viola el ODR cada vez o solo si al menos un constructor está en un archivo de encabezado?

Capturar una referencia por referencia en un C++11 lambda

Considere esto: #include <functional> #include <iostream> std::function<void()> make_function(int& x ... Buscando respuestas definitivas basadas en estándares aquí:) Funciona lo suficientemente bien en la práctica hasta ahora ;)

¿Las funciones distintas tienen direcciones distintas?

Considere estas dos funciones: void foo() {} void bar() {} ¿Está garantizado que &foo != &bar? Del mismo modo, ... ), es en realidad ilegal bajo el estándar actual de C++? (C++14 en este punto) (Naturalmente como-si safe plegado es legal)

¿Cuál es el tipo de literal nulo?

Doído todo, me pregunto cuál es el tipo de null literal en C#? En Java, el null literal es del tipo null especial : Tam ... ULL), que es de tipo std::nullptr_t. Busqué en MSDN acerca de C#, pero la especificación no parece decir nada al respecto.

¿0 es un octal o un decimal en C? [duplicar]

Esta pregunta ya tiene una respuesta aquí: ¿0 es un literal decimal o un literal octal? ... stándar. Por favor, hágame saber lo que está en C? ¿Hará alguna diferencia? ¿Por qué son diferentes en diferentes estándares?

Es std:: memcpy entre diferentes tipos trivialmente copiables comportamiento indefinido?

He estado usando std::memcpy para eludir el alias estricto durante mucho tiempo. Por ejemplo, inspeccionando un float, como ... ta pregunta. Por lo que sé, podría reemplazar std::memcpy con un simple bucle de copia de bytes, y la pregunta será la misma.

¿A[a[0]] = 1 produce un comportamiento indefinido?

¿Este código C99 produce un comportamiento indefinido? #include <stdio.h> int main() { int a[3] = {0, 0, 0}; a[a ... Esto produce realmente un comportamiento indefinido? (También quiero saber sobre este problema en otras versiones de ISO C.)

¿Por qué const char* const & = "hello" puede compilar?

Estoy leyendo un fragmento de código de un libro y encuentro esto: const char* const & a = "hello"; //can compile cons ... apunta a const char. Entonces, ¿por qué agregar un const extra, indicando que el puntero es un const, le permite compilar?