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 个字节。
声明为 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 个字节。