我以前从未在 C++ 中遇到过这种情况,但奇怪的是它仍然可以编译但没有按照我的预期进行。有人能告诉我它的作用吗?请查看代码,更多信息如下。
#include <iostream>
using namespace std;
class Test{
public:
Test();
};
Test::Test(){ cout << "ctor" << endl; }
int main(void){
Test t(); // this compiles but doesn't call the constructor
return(0);
}
它会编译,但如果我尝试使用“t”,它不会。我只依赖于构造函数,我的代码没有按预期工作。解决方法是去掉括号“Test t();”到“测试 t;”。我的问题是“测试 t();”中发生了什么例如,编译器认为它允许编译发生了什么。
最佳答案
这是 Most Vexing Parse .基本上,根据 C++ 解析规则,您所拥有的不是名为 t
的 Test
类型的对象,而是函数 t 的函数声明
接受零个参数并返回一个 Test
。
顺便说一句,clang++ 实际上识别了这种情况并发出警告,告诉您这可能不是您想要的。
关于c++ - 在 C++ 中实例化一个类 : Strange Syntax Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925505/