2016-05-29 98 views
3

array.zero-2说:begin()== end()是什么?

在的情况下N == 0begin() == 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是standard-eze的简写,而不是C++表达式。

这只是意味着可以评估begin()end()而不会导致未定义的行为,并且可以比较它们是否相等。为了做到零元素数组,他们需要给出一个有效的(可比较的)值,即使该值不能被解引用(用于访问数组元素或该类型的任何变量 - 这是end()的情况)。

如果他们说更多的话,但这就是生活,它可能会更容易。许多人为了便于理解而拍摄简洁。无论谁写它可能认为像一个数学家,但觉得他们必须使用C + +语法。

相关问题