postfix ++的优先顺序

时间:2018-05-15 20:59:37

标签: c++ operators

请考虑以下代码:

int a = 5;
int b = a++;
cout << "b is " << b << endl; // b is 5 

或:

int get_number(){
    int a = 5;
    return a++;
}
int main(){
    int b = get_number();
    cout << "b is " << b << endl; // b is 5
}

根据this table postfix ++运算符的优先级高于=运算符,因此输出应为b is 6。但输出为b is 5。我们怎么解释这个?

2 个答案:

答案 0 :(得分:9)

内置类型的postfix ++运算符(和postfix--运算符)的契约是它返回之前的值,而不管发生的变化如何。因此,即使接收到更改的变量在之后被赋予5,该函数仍会返回6

答案 1 :(得分:1)

根据expr.post.incr强调我的

  

后缀++表达式的值是其操作数的值。 [注意:获得的值是副本原始值 - 结束注释]

     

++表达式的值计算在之前排序   修改操作数对象。关于   不确定顺序的函数调用,后缀++的操作   是单一的评估

age = input("What's your age? ")
while age != age.isdigit():
    print("only numbers are allowed")
    age = input("What's your age? ")
age = int(age)