C++ 读取前是否更改后缀标识符?

C++ 读取前是否更改后缀标识符?,c++,C++,我真的不懂后缀。我知道它首先使用标识符,然后增加或减少,首先显示I,然后显示++。但现在我觉得我错了,还是不明白 #include <iostream> using namespace std; int main() { int i = 0; cout << i << i++ << i; cout << "\n\n\nPress Enter to close the window . . . "; c

我真的不懂后缀。我知道它首先使用标识符,然后增加或减少,首先显示
I
,然后显示
++
。但现在我觉得我错了,还是不明白

#include <iostream>

using namespace std;

int main()
{
    int i = 0;
    cout << i << i++ << i;
    cout << "\n\n\nPress Enter to close the window . . . ";
    cin.clear();
    cin.sync();
    cin.get();
    return 0;
}
第一个
i
在读取增量之前被更改。为什么

我预料

001

Press Enter to close the window . . .

有人能解释一下吗。

永远不要做这种事,它是没有定义的

 cout << i << i++ << i;

cout永远不要做这样的事,它是未定义的

 cout << i << i++ << i;
cout我认为什么是未定义的*)这里是函数参数的求值顺序。这里实际调用的是对(重载)的函数调用

std::ostream&operator我认为什么是未定义的*)这里是函数参数的求值顺序。这里实际调用的是对(重载)的函数调用


std::ostream&operator不幸的是,这并不能解释为什么和什么是未定义的。不幸的是,这并不能解释为什么和什么是未定义的。-函数参数的计算顺序不是未定义的,它是未指定的。未指定和未定义的行为不一样。此外,您的描述没有正确解释为什么这是未定义的行为。检查标记副本中的答案,以确切了解这是未定义的行为。@Als为什么批评我而不是编辑和更正?我认为这个网站是为了互相帮助,而不是为了比别人更聪明。顺便提一下很明显,我没有点击复制链接。当我已经非常详细地回答了这个问题时,你是否希望我编辑并纠正你的错误答案?因为你不明白,你应该提问并解决你的疑问,而不是发布错误答案。否决是指对答案不正确或不满意。我否决了你的答案是错误的。最后,如果你不能接受批评,就不要发帖。仅供参考,你的答案仍然不正确。@Als为什么你认为我不能接受批评?-1函数参数的求值顺序不是未定义的,而是未指定的。未指定和未定义的行为不一样。此外,您的描述没有正确解释为什么这是未定义的行为。检查标记副本中的答案,以确切了解这是未定义的行为。@Als为什么批评我而不是编辑和更正?我认为这个网站是为了互相帮助,而不是为了比别人更聪明。顺便提一下很明显,我没有点击复制链接。当我已经非常详细地回答了这个问题时,你是否希望我编辑并纠正你的错误答案?因为你不明白,你应该提问并解决你的疑问,而不是发布错误答案。否决是指对答案不正确或不满意。我否决了你的答案是错误的。最后,如果你不能接受批评,就不要发帖。仅供参考,您的答案仍然不正确。@Als为什么您认为我不能接受批评?在接受答案之前,您是否阅读了标记副本中的任何答案?因为你接受的答案显然是不正确的。在接受答案之前,你是否阅读了标记副本中的任何答案?因为你接受的答案显然是错误的。
 cout << i << i << (i + 1);
 i ++;
  cout << i++;
std::ostream& operator<< (std::ostream&, int);
cout << i << i++ << i;
operator<<( operator<<( operator<<(cout,i), i++), i);
cout << i;
cout << i++;
cout << i;
operator<<(cout,i);
operator<<(cout,i++);
operator<<(cout,i);