c++ - 调用具有意外结果的默认构造函数
问题描述
我遇到了默认构造函数的意外行为。有这堂课
class Data {
public:
Data() { std::cout << "default ctor"; }
};
并打电话
Data(x);
调用默认构造函数,而调用
double x;
Data(x);
产生冲突的声明 'Data x'。
我想这是某种令人烦恼的解析,但我看不出其背后的逻辑。你能解释一下 g++ 编译器是怎么看的吗?
解决方案
这里的问题来自于引入 C 时的很久以前。当你写
type(name);
它被解析为声明一个变量,如
type name;
这意味着在
Data(x);
你声明了一个名为的变量x
,它的类型Data
和
double x;
Data(x);
你x
用 type声明一个变量名,double
然后尝试声明一个x
用 type命名的变量Data
。你不能像这样重新定义一个变量,所以你会得到一个错误。
如果您只想声明一个临时Data
的,那么语法将是
Data();
推荐阅读
- comsol - Comsol:无限元素域模块
- authentication - Verdaccio 用户注册已禁用
- javascript - 如何在javascript中修复小数点后前导零的十进制值
- java - Gradle 无法开始您的构建。我不知道发生了什么,但 android studio 显示此错误。昨天它不存在,但今天我没有发生什么
- postgresql - SQL 脚本看不到数据库
- python - 有没有办法改变 plotly.express.sunburst 图中叶子的不透明度?
- c# - HttpUtility.ParseQueryString 缺少一些字符
- node.js - Vonage,视频重新连接。当我通过获取两个事件数据包重新连接时
- python - 如何检查一个节点是否链接到另一个节点?
- android - Korg Microkey Air 是否可以通过 Android 蓝牙工作?