我面臨着一個值初始化與集合初始化混合的問題。 到目前爲止,我試圖依靠做我所有的初始化是這樣的:值初始化vs集合初始化
自動無功=類型{};
(是的,我知道大括號初始化男星VS默認構造函數的陷阱的。因此,沒有有關意見,請!)
我希望這會正確「歸零」或init VAR的記憶。
但在VS 2013更新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_initialization http://en.cppreference.com/w/cpp/language/aggregate_initialization
那麼,VS 2013的越野車呢?爲什麼它不會將a.b_stuff.g數組清零?
你是對的,是一個MSVC錯誤。你正確地初始化'b_stuff'(我在寫回答時已經錯過了那行)。 – Manu343726
呵呵,「好」。我開始恐慌/希望我錯過了一些明顯的事情。如果這是真的MSVC的錯誤則是壞消息...... –
嘗試使用級值初始化,其允許的,因爲C++ 11,但我不知道,如果微軟的人實現了它:HTTP:/ /coliru.stacked-crooked.com/a/e1e6d42289ce54ee – Manu343726