c++ most-vexing-parse

c++ - Más molesto análisis



most-vexing-parse (1)

Esto se debe al hecho de que TimeKeeper time_keeper(Timer()); se interpreta como una declaración de función y no como una definición de variable. Esto, en sí mismo, no es un error, pero cuando intenta acceder al miembro get_time() de time_keeper (que es una función, no una instancia de TimeKeeper), su compilador falla.

Así es como su compilador ve el código:

int main() { // time_keeper gets interpreted as a function declaration with a function argument. // This is definitely *not* what we expect, but from the compiler POV it''s okay. TimeKeeper time_keeper(Timer (*unnamed_fn_arg)()); // Compiler complains: time_keeper is function, how on earth do you expect me to call // one of its members? It doesn''t have member functions! return time_keeper.get_time(); }

Obtuve el código de here .

class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t); int get_time() { return 1; } }; int main() { TimeKeeper time_keeper(Timer()); return time_keeper.get_time(); }

Por lo que parece, debería obtener un error de compilación debido a la línea:

TimeKeeper time_keeper(Timer());

Pero solo ocurre si return time_keeper.get_time(); está presente.

¿Por qué importaría esta línea, el compilador detectaría ambigüedad en la time_keeper(Timer() ) de time_keeper(Timer() ) .