【发布时间】:2015-03-20 17:03:25
【问题描述】:
看看这个简单的类:
class A {
int *val;
public:
A() { val = new int; *val = 0; }
int get() { return ++(*val); }
};
为什么当我运行这段代码时它会打印出21:
int main() {
A a, b = a;
cout << a.get() << b.get();
return 0;
}
但如果我这样运行它,它会打印出12,这正是我所期待的:
int main() {
A a, b = a;
cout << a.get();
cout << b.get();
return 0;
}
我在这里缺少什么?运算符优先级?仅供参考,这是一个 C++ 测试问题,而不是生产代码。
编辑:
这是否意味着当我有cout << (Expr1) << (Expr2) 时,Expr1 和Expr2 在打印Expr1 的输出之前被评估?
【问题讨论】:
-
这是关于关联性,而不是优先级。只有一个运算符,因此不会出现优先级问题。
-
这与关联性无关。这是关于子表达式的求值顺序。
-
@EJP 不,不是。它通常未指定。
-
C++11(草案 N3337)dcl.fct.default:
The order of evaluation of function arguments is unspecified.