我遇到了默认构造函数的意外行为。上这堂课
class Data {
public:
Data() { std::cout << "default ctor"; }
};
并致电
Data(x);
调用默认构造函数,而调用
double x;
Data(x);
产生与冲突的声明'Data x'。
我想这是一种令人烦恼的解析,但是我看不到背后的逻辑。您能解释一下g ++编译器如何看待吗?
答案 0 :(得分:3)
这里的问题来自C语言的引入。当你写
type(name);
它被解析为声明了像这样的变量
type name;
这意味着
Data(x);
您声明一个名为x
且类型为Data
且位于
double x;
Data(x);
您声明x
类型的变量名double
,然后尝试声明x
类型的变量Data
。您不能像这样重新定义变量,否则会出现错误。
如果您只想声明一个临时Data
,则语法为
Data();