|
|
1
44
在C++中,副作用的顺序是不确定的。此外,在单个表达式中修改变量两次没有定义的行为(请参见 C++ standard ,§5.0.4,物理页87/逻辑页73)。
显然,代码编译为:
|
|
|
2
16
这是未定义的行为,结果将根据您使用的编译器而有所不同。比如说,, C++ FAQ Lite . |
|
|
3
12
根据C++标准,在一组序列点内修改一次以上的值会导致未定义的行为(第5节第4段):
请注意,第二个示例,”
下面是C++标准所说的“未定义行为”的含义:
换句话说,编译器可以自由地执行它想要的任何操作,包括
因此,我想严格来说,表现出未定义行为的东西不是“非法的”,但根据我的经验,每当C/C++程序中出现表现出“未定义行为”的东西时(除非它是一个扩展),它就是一个bug。我认为将这样的构造称为非法并不令人困惑、误导或误导。 另外,我认为试图解释编译器是如何达到14的值并没有特别大的帮助,因为这没有抓住要点。编译器几乎可以做任何事情;事实上,当编译器使用不同的优化选项运行时,很可能会得到不同的结果(或者可能会产生崩溃的代码,谁知道呢?)。 对于那些希望获得更多参考资料或向权威机构申诉的人,以下是一些建议:
以下是比亚恩·斯特劳斯特鲁普对此事的看法:
C++标准使用“非法”一词——当描述C++和标准C之间的差异时,使用
|
|
|
4
4
易于理解的您的编译器正在评估 二者都 在执行求和之前递增,而不缓存中间结果。这意味着当你加两次i时,它现在的值是7。 如果你这样做
你会看到13个。 |
|
|
5
2
在特定的编译器上,它选择先执行两个++操作,然后执行加法。它将代码解释为:
这是完全正确的。 |
|
|
6
1
很可能是这样
|
|
7
1
我认为,当从语法树的角度来看问题时,问题的答案变得更加清晰:
我
|
|
|
8
-1
因为前缀增量具有优先级:
|
|
|
9
-1
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |