利用对象来初始化,C++构造函数为啥没有执行

编译器把这玩意当成函数声明了,比如用clang就会给你个警告:test.cpp:13:8: warning: parentheses were disambiguated as a function declaration T m(T()); ^~~~~test.cpp:13:9: note: add a pair of parentheses to declare a variable T m(T()); ^ ( )然后生成的AST长这样:DeclStmt 0x28ab870 \u0026lt;line:13:5, col:13\u0026gt;`-FunctionDecl 0x28ab7b0 parent 0xc86cc0 \u0026lt;col:5, col:12\u0026gt; col:7 m \u0026#39;class T (class T (*)(void))\u0026#39; `-ParmVarDecl 0x28ab6b0 \u0026lt;col:9, col:11\u0026gt; col:11 \u0026#39;class T (*)(void)\u0026#39;:\u0026#39;class T (*)(void)\u0026#39;可以直观地看出 T m(T()); 被当做声明了一个函数 m ,带一个类型为 T (*)(void) 的参数,返回值为 T 。话说刚刚下的clang玩的,似乎真的比gcc好(逃
■网友
制造一个错误,然后看数据类型,很明显,被当成函数声明了。利用对象来初始化,C++构造函数为啥没有执行
【利用对象来初始化,C++构造函数为啥没有执行】
根据错误信息,此处的v是一个返回值为T,参数为(一个返回值为T的函数的指针)但的函数。


    推荐阅读