c++ - 操作数的评估顺序

标签 c++ c c++11 expression operator-precedence

在表达式 a + b 中,a 是否保证在 b 之前求值,还是未指定求值顺序?我认为是后者,但我很难在标准中找到明确的答案。

因为我不知道 C 处理这个问题的方式是否与 C++ 不同,或者评估顺序规则是否在 C++11 中得到了简化,所以我将把这个问题标记为所有这三个问题。

最佳答案

在C++中,对于用户自定义类型a + b是一个函数调用,标准是这样说的:

§5.2.2.8 - [...] The order of evaluation of function arguments is unspecified. [...]

对于普通运算符(operator),标准说:

§5.4 - Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified. [...]

这些在 C++11 中没有改变。然而,第二个中的措辞发生了变化,表示顺序是“未排序”而不是未指定,但本质上是相同的。

我没有 C 标准的拷贝,但我想那里也一样。

关于c++ - 操作数的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24984023/

相关文章:

c++ - 为不适用于输出流的模板矩阵重载 "+"

c++ - friend函数是如何在内部实现的

c++ - WINAPI:文件存在检查失败

c++ - 带大括号的 double 浮点初始化

c++ - 如何在 C++ 中解析数组以查找重复项

c++ - Ubuntu - 链接 boost.python - fatal error : pyconfig cannot be found

c++ - Makefile目录使用

c - 将一个结构中的信息存储到另一个结构中

c - 如何使用不带数组的 for 循环编写在 c 中打印特定数字螺旋图案的代码

C: unsigned char * bytes 数组将元素复制到其他 unsigned char * 数组