调用默认构造函数产生意外结果

时间:2018-12-21 19:46:46

标签: c++ default-constructor

我遇到了默认构造函数的意外行为。上这堂课

class Data {
public:
    Data() { std::cout << "default ctor"; }
};

并致电

Data(x);

调用默认构造函数,而调用

double x;
Data(x);

产生与冲突的声明'Data x'

我想这是一种令人烦恼的解析,但是我看不到背后的逻辑。您能解释一下g ++编译器如何看待吗?

1 个答案:

答案 0 :(得分:3)

这里的问题来自C语言的引入。当你写

type(name);

它被解析为声明了像这样的变量

type name;

这意味着

Data(x);

您声明一个名为x且类型为Data且位于

的变量
double x;
Data(x);

您声明x类型的变量名double,然后尝试声明x类型的变量Data。您不能像这样重新定义变量,否则会出现错误。


如果您只想声明一个临时Data,则语法为

Data();