Kem*_*mal 5 c++ operator-precedence
关于优先级和评估顺序的概念有很多问题,但我没有找到一个涉及我的特殊情况的问题.
请考虑以下声明:
if(f(0) && g(0)) {};
Run Code Online (Sandbox Code Playgroud)
是否保证首先评估f(0)?请注意,运算符是&&.
我的困惑源于我在"The C++ Programming Language,(Stroustrup,4ed,2013)"中所读到的内容.
在本书的第10.3.2节中,它说:
表达式中子表达式的评估顺序是不确定的.特别是,您不能假设表达式是从左到右计算的.例如:
int x = f(2)+ g(3); // undefined是否先调用f()或g()
这似乎适用于包括 &&运算符在内的所有运算符,但在后面的段落中它说:
运算符,(逗号),&&(逻辑和)和|| (逻辑或)保证在其右侧操作数之前评估其左侧操作数.
第11.1.1节还提到了另一个问题:
&&和|| 运营商仅在必要时评估其第二个参数,因此它们可用于控制评估顺序(第10.3.2节).例如:
while(p &&!whitespace(p))++ p;
这里,如果它是nullptr,则p不被解除引用.
最后一句话暗示了&&和|| 首先评估他们的第一个参数,所以它似乎强化了我的假设,即第二个引用中提到的运算符是第一个引用的例外,但我也无法从最后一个例子中得出明确的结论,因为表达式只包含一个子表达式而不是我的例子,其中包含两个.
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |