首页 > 解决方案 > 调用具有意外结果的默认构造函数

问题描述

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

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

并打电话

Data(x);

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

double x;
Data(x);

产生冲突的声明 'Data x'

我想这是某种令人烦恼的解析,但我看不出其背后的逻辑。你能解释一下 g++ 编译器是怎么看的吗?

标签: c++default-constructor

解决方案


这里的问题来自于引入 C 时的很久以前。当你写

type(name);

它被解析为声明一个变量,如

type name;

这意味着在

Data(x);

你声明了一个名为的变量x,它的类型Data

double x;
Data(x);

x用 type声明一个变量名,double然后尝试声明一个x用 type命名的变量Data。你不能像这样重新定义一个变量,所以你会得到一个错误。


如果您只想声明一个临时Data的,那么语法将是

Data();

推荐阅读