请考虑以下代码:
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
。我们怎么解释这个?
答案 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)