值初始化vs聚合初始化
Value initialization vs aggregate initialization
我正面临一个值初始化与聚合初始化混合的问题。到目前为止,我尝试这样做所有的初始化:
auto var = Type{};
(是的,我知道括号初始化函数与默认函数的缺陷。所以请不要评论!)
我希望这将正确地"归零"。或者init var的内存
但是在VS 2013 Update 2中,我看到了这个:
#include <string>
#include <iostream>
using namespace std;
struct B
{
double g[10];
std::string str;
};
struct C
{
double g[10];
};
struct A
{
double a[3];
double b = 0;
double d;
struct B b_stuff;
struct C c_stuff;
A() : b_stuff{}, c_stuff{} {}
};
int main()
{
auto a = A{};
double big[50] = {};
for(auto b : a.b_stuff.g) { cout << b << " "; }
cout << endl;
cout << endl;
for(auto b : a.c_stuff.g) { cout << b << " "; }
cout << endl;
cout << endl;
for (auto b : big) { cout << b << " "; }
return 0;
}
输出如下:
-9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
使用GCC 4.7.2:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我读了这篇文章,但我不明白这种非归零行为的原因:
http://en.cppreference.com/w/cpp/language/value_initializationhttp://en.cppreference.com/w/cpp/language/aggregate_initialization
那么,VS 2013有bug吗?为什么它不把a。b。那部分归零。g数组?
Visual c++有很长的值初始化错误历史。我相信Bug 746973是你在这里偶然发现的。
相关文章:
- 使用双大括号的矢量初始化:std::string vs int
- 如何初始化boost :: edge_weight_t类型在vs vs c 上
- C 模板类,初始化()vs {}
- 在类嵌套静态常量成员变量初始化 Clang vs GCC 哪个编译器是正确的
- 为什么VS编译器不会在C++上自动初始化局部变量?
- 'for' 循环中的 'int i = 0' vs. 'int i(0)'(赋值与初始化计数变量)
- 在VS 2013中使用初始值设定项列表初始化地图的地图
- 使用const初始化constexpr,--int vs float
- 在使用auto时初始化结构会导致VS 2013中的副本
- std::shared_ptr 初始化:make_shared<Foo>() vs shared_ptr<T>(new Foo)
- 线程安全惰性初始化:静态vs std::call_once vs双重检查锁定
- 无法初始化Direct3D VS 2015(Win 10)
- 使用 VS 2012 在构造函数中的树节点中初始化数组
- 直接初始化字段vs默认构造函数中的初始化列表
- 默认初始化vs.值初始化
- 值初始化vs Calloc vs手动初始化速度
- 构造函数初始化列表vs昂贵操作
- 值初始化vs聚合初始化
- 大括号初始化vs.括号错误
- 构造函数初始化Vs赋值