Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的增量和三元运算符优先级+;_C++_Iterator_Operator Precedence - Fatal编程技术网

C++ c+中的增量和三元运算符优先级+;

C++ c+中的增量和三元运算符优先级+;,c++,iterator,operator-precedence,C++,Iterator,Operator Precedence,我想打印用分号分隔的向量元素。 下面的代码段产生了一个奇怪的结果:结果从向量的第二个元素开始。有人能解释一下吗?在这种情况下,迭代器何时递增 #include <iostream> int main() { vector<int> v(10); for ( int i = 0; i < 10; ++i ) { v[i] = i; } for ( auto it = v.begin(); it != v.end();

我想打印用分号分隔的向量元素。 下面的代码段产生了一个奇怪的结果:结果从向量的第二个元素开始。有人能解释一下吗?在这种情况下,迭代器何时递增

#include <iostream>
int main() {
    vector<int> v(10);
    for ( int i = 0; i < 10; ++i ) {
        v[i] = i;
    }

    for ( auto it = v.begin(); it != v.end(); )
        std::cout << *it << ( (++it != v.end() ) ? ";" : "" );
}
#包括
int main(){
向量v(10);
对于(int i=0;i<10;++i){
v[i]=i;
}
对于(自动it=v.begin();it!=v.end();)

std::cout在C++17之前,未指定*it和++it的携带顺序。请参阅,例如

这可以在一个简单的例子中看到

#include <iostream>

int main() {
    int i = 3;
    std::cout << i << ++i;
}
:

几乎所有C++操作符的操作数的顺序(包括函数调用表达式中函数参数的求值顺序和表达式中的子表达式的求值顺序)未指定。< /P> 自C++17以来,轮班有一个特殊规则:

在移位运算符表达式
E1E2
中,
E1
的每个值计算和副作用在
E2
的每个值计算和副作用之前排序


这应该在GCC 7上实现,它实现了C++ 17标准,这将是非常棒的。不幸的是,我不能影响我们的基础结构。如果你读了你所给的链接,你会发现这个序列是未指定的,而不是(在C++标准中)。与未定义相同。此外,在本例中,C++17中的情况发生了变化:在类似
cout@Peter:You's right的表达式中,我的意思是未指定,但不知道C++17的变化。感谢您的参考。顺便说一句,gcc表示以下警告:警告:“I”上的操作可能未定义[-Wsequence point]如果向量迭代器是指针的typedef,那么它很可能是未定义的
warning: unsequenced modification and access to 'i' [-Wunsequenced]
    std::cout << i << ++i;
                 ~    ^