考虑代码
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
struct B
{
public:
void f() { for (auto &v : member) { std::cout << v << std::endl; } }
private:
int member[100];
};
int main()
{
B b{};
b.f();
}
我认为此代码由 $8.5.4/3 指导
类型 T 的对象或引用的列表初始化定义如下: — 如果初始值设定项列表没有元素并且 T 是具有默认构造函数的类类型,则对象是值初始化的。
相反,VS2013 编译器发出所有 0xCCCCCCCC 暗示它将 b.member 的所有元素保留为未初始化。因此,它似乎正在执行默认初始化而不是值初始化。
如果我遗漏了什么,请告诉我。