C++11 自动变量:浮点数组与自动

C++11 auto variable : float array vs auto

声明为 auto 的浮点数组的大小与实际大小不同。为什么会这样??

例如:

声明:

float duto[] = {2.2222f,2.223f,34.5f,1.0f,9.0f};
auto dutot = {2.2222f,2.223f,34.5f,1.0f,9.0f};

印刷尺寸:

std::cout << " float array size v: " << sizeof(duto)<<std::endl;
std::cout << " auto v: " << sizeof(dutot)<<std::endl;

输出:

float array size v: 20
auto v: 16

auto dutot = {2.2222f,2.223f,34.5f,1.0f,9.0f};

这里的

auto其实推导为initializer_list<float>。所以你正在打印 initializer_list<float> 的大小。

我刚刚在 ubuntu 14.04 上查看了 g++ 4.8.2 中的 initializer_list 实现。它包含两个成员 _M_array_M_len_M_array是一个指针,_M_len的类型是size_t。所以我猜你的机器是 64 位的。因为指针和 size_t 在 64 位平台上通常是 8 个字节。