[英]std::array of size zero
有std::array<int,0>
,大小為零的數組是什么意思?
在發布之前我已經在SO中經歷了類似的問題,所有這些問題都是關於簡單的數組類型和C語言,並且大多數人都認為這是非法的。 但是在C ++ array<int,0>
是允許的。
根據cppreference.com
零長度數組(N == 0)有一種特殊情況。 在這種情況下,
array.begin() == array.end()
,這是一些唯一的值。 調用front()
或back()
對零大小數組的影響是未定義的。
為什么不將它定義為非法?
擁有std :: array,大小為零的數組是什么意思?
與例如空std::vector
或空std::set
。
為什么不將它定義為非法?
希望使其合法,因為這意味着當std::array
的大小是編譯時計算的結果時,泛型編程不必處理特殊情況。
由於模板專業化, 可以將其定義為合法的。 例如,Visual C ++附帶的實現以類似於以下的方式專門化std::array
:
template<class T>
class array<T, 0> // specialisation
{
// ...
size_type size() const
{
return 0;
}
T elements[1]; // the raw array cannot have a size of 0
};
我想每個編譯器都實現了std::array
。
std :: array被認為是可以為空的其他標准容器。 因此,N等於零的std::array
定義了一個空容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.