2016-11-15 114 views
0

我是C++新手14 std::index_sequence。該結構的size成員是什麼意思?無論我創建了多少個元素,它總是返回一個。std :: index_sequence返回大小始終爲1

std::integer_sequence<int, 1, 2, 3>::size => 1 
std::index_sequence<8, 7, 1, 5>::size => 1 

雖然返回值應該是3和4(該序列的元素數)。

+1

[Can not reproduce](http://coliru.stacked-crooked.com/a/07fb9de4c18ea993); [SSCCE](http://sscce.org)需要。 – ildjarn

+2

如果沒有[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)(或SSCCE),很難說什麼,但[來自TartanLlama的答案](http:// stackoverflow。 com/a/40612639/440558)是一個非常好的猜測。這應該給你編譯警告。不要忽視編譯器警告,它們與錯誤一樣重要。 –

回答

13

std::integer_sequence::size是一個函數,所以你需要調用它:

std::integer_sequence<int, 1, 2, 3>::size() => 3 

你可能會看到1,因爲如果你寫這樣

std::cout << std::integer_sequence<int, 1, 2, 3>::size; 

然後代碼的函數將被隱式轉換爲函數指針,然後到bool,並且值將爲true,因爲指針不爲空。

+0

我只是好奇。爲什麼函數指針在cout中被轉換爲bool? – MayurK

+0

編譯器應該警告它。 – SergeyA

+1

@MayurK因爲'std :: ostream'和'bool'有一個'operator <<'重載,但函數指針不是一個,並且函數指針可隱式轉換爲'bool'。 – TartanLlama