c++ - 在 C++ 中实例化一个类 : Strange Syntax Bug

标签 c++ compiler-construction

我以前从未在 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++ 解析规则,您所拥有的不是名为 tTest 类型的对象,而是函数 t 的函数声明 接受零个参数并返回一个 Test

顺便说一句,clang++ 实际上识别了这种情况并发出警告,告诉您这可能不是您想要的。

关于c++ - 在 C++ 中实例化一个类 : Strange Syntax Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925505/

相关文章:

python - 编译 Python

.net - 在线编译VB.NET?

c - 我的 Fortran 编译器的中间代码生成 : DAG or quadruples

c++ - 不确定我对 C++ 中函数声明的解释?

c++ - 蓝牙可以接收数据但不能发送数据(C++ socket编程通信Matlab)

c++ - 查找所有唯一二叉搜索树的算法的时间复杂度是多少?

c++ - 调试和预处理器指令

c++ - 使用虚函数调用时节省堆栈空间

c++ - 对象构造 : default parameter vs delegation

c# - 错误 "the exec task needs a command to execute"是什么意思?