2016-05-29 13 views
3

array.zero-2は言う:ケースN == 0begin() == end() ==ユニークな値でbegin()== end()とは何ですか?

。 の戻り値はdata()で、指定されていません。

このユニークな値は何を意味しますか?式begin() == end()の結果が一意の値であることを意味しますか?ブールは真実でも虚偽でもなく、それはあまりユニークではないので、私はそれがどのように意味を成しているかはわかりません。私は次のテストを行った:

#include <array> 
#include <iostream> 
#include <iomanip> 
#include <type_traits> 

int main() 
{ 
    std::array<int, 0> test; 
    auto b = test.begin(); 
    auto e = test.end(); 
    std::cout << std::boolalpha 
       << (test.begin() == test.end()) 
       << std::is_same<bool, decltype(test.begin() == test.end())>::value 
       << std::is_same<bool, decltype(b == e)>::value; 
} 

すべての出力は、期待通りにtrueです。次に、ゼロサイズでない配列では違うかもしれないと思った。

int main() 
{ 
    std::array<int, 0> test; 
    std::array<int, 1> test2; 
    std::cout << std::boolalpha 
       << std::is_same< 
        decltype(test.begin() == test.end()), 
        decltype(test2.begin() == test2.end()) 
       >::value 
       << std::is_same< 
        decltype(test.begin()), 
        decltype(test2.begin()) 
       >::value; 
} 

また、では、「ユニークな価値」とはどういう意味ですか?ユニークな価値は何ですか?

答えて

6

begin() == end() == unique valueは、実際のC++よりも論理的な説明です。 begin()はend()と同じであり、どちらも一意の値に等しいことを示しています。

基本的に論理式「a = b = c」ですが、C++ ==を使用します。

3

begin()==end()==unique valueは、C++式ではなく、標準的な簡略表記です。

これは、未定義の動作を引き起こさずにbegin()end()を評価できることを意味し、両者を比較して同等かどうかを判断できます。ゼロ要素配列の場合、その値を逆参照できない場合でも(配列要素またはその型の変数にアクセスするために使用されます(end()の場合)、有効な(比較可能な)値を与える必要があります。

もっと言葉で言えば、それは人生だと言えば、おそらくもっと簡単だろう。理解を容易にするために、多くの人々が簡潔に撮影します。それを書いた人はおそらく数学者のように思えるかもしれませんが、C++構文を使わなければならないと感じました。

関連する問題