c++ - 为什么类型变量;不调用默认ctor?
问题描述
让我们假设以下类 Foo。
struct Foo
{
int i;
bool j;
};
为什么我从以下几行得到不同的结果?
int main(void)
{
//I thought the default constructor would be called
Foo foo1;
cout << foo1.i << " : " << foo1.j << endl; // " 4196352 : 0 " --> ctor not called?
//if calling the default constructor explicitly
foo1 = Foo();
cout << foo1.i << " : " << foo1.j << endl; // " 0 : 0" --> ctor called.
}
不应该隐式调用默认的ctor吗?
根据cpp参考:
如果没有为类类型(结构、类或联合)提供任何类型的用户声明的构造函数,编译器将始终将默认构造函数声明为其类的内联公共成员。
解决方案
根据 C++ 标准
隐式定义的默认构造函数执行类的一组初始化,这些初始化将由用户编写的该类的默认构造函数执行,没有 ctor-nitializer (15.6.2) 和空的复合语句。
该类有一个不初始化类成员的普通默认收缩器。因此它们具有不确定的值。
这种形式的构造函数调用
Foo()
value 初始化数据成员。对于基本类型,这意味着零初始化。
推荐阅读
- excel - 如何遍历 a 列中的单元格以从每个单元格中的数据库返回值
- jquery - 删除具有特定 attr 值的选择元素
- r - 如何在错误分析中去除 NA 值
- python - 为什么在 Python 中重写类的 __get__ 方法会影响返回的内容?
- css - Angular:group() 函数不会并行运行动画,会破坏动画流程
- javascript - jQuery如何在选择器上加载图像后执行功能?
- powershell - 如何运行包含在 Powershell 脚本中的变量中的批处理脚本?
- hadoop - 在 HBase 1.4.9 中创建表失败
- ssl - XAMPP 中跨 LAN 的 localhost 自签名证书
- python - 如何将python回调添加到pointdrawtool