值初始化vs聚合初始化



我正面临一个值初始化与聚合初始化混合的问题。到目前为止,我尝试这样做所有的初始化:

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是你在这里偶然发现的。

最新更新