簡體   English   中英

std :: size的大小為零的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM