most-vexing-parse
Constructor predeterminado con corchetes vacíos
¿Hay alguna buena razón para que un conjunto vacío de corchetes redondos (paréntesis) no sea válido para llamar al construct ... ject(); // error
Parece que escribo "()" automáticamente cada vez. ¿Hay una buena razón por la que esto no está permitido?
¿Por qué esto llama al constructor predeterminado?
struct X
{
X() { std::cout << "X()\n"; }
X(int) { std::cout << "X(int)\n"; }
};
const int answer = ... eterminado.
PUNTOS DE BONIFICACIÓN: ¿Qué tendría que cambiar para obtener una declaración temporal en lugar de una variable?
¿Por qué C++ nos permite rodear el nombre de la variable entre paréntesis al declarar una variable?
Por ejemplo, una declaración como la siguiente:
int (x) = 0;
O incluso eso:
int (((x))) = 0;
Me topé con esto porque e ... l posibilidad porque por ahora veo que solo crea el caso similar a la notoria "análisis más irritante" y ¿no añade nada útil?
Comportamiento extraño del compilador de Visual Studio C++
Solo tengo curiosidad por saber por qué este pequeño fragmento de código se compila correctamente (y sin advertencias) en Vi ... e no puedo probarlos ahora.
struct T {
int t;
T() : t(0) {}
};
int main() {
T(i_do_not_exist);
return 0;
}
Análisis más molesto
Obtuve el código de aquí.
class Timer {
public:
Timer();
};
class TimeKeeper {
public:
TimeKeeper(const Timer& t ... tá presente.
Por qué importaría esta línea, el compilador detectaría ambigüedad en la construcción de time_keeper(Timer() ).