什么是"序列点"?
未定义的行为和序列点之间的关系是什么?
我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?
如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我有这样的代码:
std::cout << " a: " << classDate.getDays() << " b: " << classDate++ << " c: " << classDate.getDays();
Run Code Online (Sandbox Code Playgroud)
我重载了后增量运算符.
在类m_days变量中有值:
我的问题是,为什么来自cout的结果是错误的顺序:
a:5 b:5 c:4
我在debuger中检查过它,课堂上的值是正确的.当我写这样的代码时:
std::cout << " a: " << classDate.getDays();
std::cout << " b: " << classDate++;
std::cout << " c: " << classDate.getDays();
Run Code Online (Sandbox Code Playgroud)
一切都是正确的(a:4 b:5 c:5).
这是运营商的优先问题吗?
卡米尔
我是C++的新手,研究增量和减量运算符.所以我尝试了这个例子:
int x = 4;
cout << ++x << " " << x++ << " " << x++ << endl << endl;
cout << x << endl;
Run Code Online (Sandbox Code Playgroud)
它在C++ .NET和QtCreator以及5个在线C++编译器上返回这个奇怪的输出:
7 5 4
7
Run Code Online (Sandbox Code Playgroud)
该奇怪的是,我希望是这样的:
5 5 6
7
Run Code Online (Sandbox Code Playgroud)
你能解释一下会发生什么吗
比方说,我有一个很长的声明
cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";
会像逻辑指令一样findCurrent()运行findLowest()吗?