20
鑑於任何std::array< T, 0 >
,它爲什麼不是空的?我的意思是 「空」,如下所示:爲什麼std :: array < T, 0 >不是空的?
std::is_empty< std::array< int, 0 > >::value
返回false
和
#include <iostream>
#include <tuple>
#include <array>
struct Empty {};
int main()
{
std::cout << sizeof(std::tuple<int>) << std::endl;
std::cout << sizeof(std::tuple<int,Empty>) << std::endl;
std::cout << sizeof(std::tuple<int,std::array<int,0>>) << std::endl;
}
產生
4
4
8
,這意味着,對於std::array<int,0>
,不應用空基地優化(EBO) 。
這似乎特別奇怪,我因爲std::tuple<>
(注:無模板參數)爲空,即std::is_empty<std::tuple<>>::value
確實產生true
。
問題:爲什麼這樣,因爲尺寸0
已經是std::array
的特例?這是標準中的故意還是疏忽?
GCC 4.8似乎以不同的方式做到這一點(或的libstdC++與它的到來),由於'的sizeof(標準::陣列)== 1'。但我意識到你說過「一個可能的實施」,我接受這個推理,所以謝謝! –
2013-03-20 00:17:11
GCC做了'value_type _M_instance [_Nm? _Nm:1];''我看到'sizeof(array)== sizeof(int)' –
2013-03-20 00:25:23
我在LiveWorkSpace.org上看到GCC 4.8的sizeof(std :: array)== 1'。奇怪。 –
2013-03-20 00:29:20