c++ - C ++:存在构造函数时的结构初始化
问题描述
使用列表初始化结构时,我对 C++ 行为有疑问。例如,以下代码在 C 和 C++ 中的行为相同。列表初始化x
:
struct X {
int x;
};
int main(int argc, char *argv[])
{
struct X xx = {0};
return 0;
}
现在,如果我添加一个构造函数,我通过测试发现调用的是构造函数而不是简单的x
成员初始化:
#include <iostream>
using namespace std;
struct X {
int x;
X(int);
};
X::X(int i)
{
cout << "X(int i)" << endl;
x = i;
}
int main(int argc, char *argv[])
{
struct X xx = {0};
return 0;
}
输出:
X(int i)
C++ 的行为是否具有相同的构造函数(如上)来覆盖简单列表初始化?进行我的测试似乎就是这样。
谢谢!
解决方案
以下语法:
X xx = {0};
只是复制列表初始化的一种形式。X
正如您所观察到的,这具有调用 的构造函数的效果。
这个初始化的名字来源于这样一个事实,它看起来像一个正在复制的列表,但只是调用了常规构造函数。请注意,这只会考虑implicit
构造函数。
在c++ 中,在 .struct
xx
请注意,如果您不提供诸如X(int)
(如您在第一个示例中所做的那样)的构造函数,则声明xx
将改为进行聚合初始化。
推荐阅读
- apache-pig - 当我们使用条件时如何处理展平运算符
- encoding - WebStorm 终端编码/字体问题
- javascript - JS - 在加载其他资源之前设置 Base-Path
- java - 为什么谷歌日历事件 API 不支持 IST 时区?
- r - 带有 Metropolis 主题的 rmarkdown 幻灯片中的字体问题
- codeigniter - 按日期搜索在分页中不起作用
- java - Firestore:查询所有集合 orderBy 和 startsWith 最后 1 个结果
- flutter - Flutter Dart 尝试捕获异常行号
- c# - Xamarin 表单和 Azure 认知服务:语音转文本服务不起作用
- reactjs - Babel 5 插件正在使用不受支持的 Babel 版本运行。试图更新 babel-relay-plugin