草庐IT

intResult1

全部标签

C++移位运算符优先级怪异

考虑以下代码:typedefvectorintVec;intVec&operator奇怪的是,编译器生成的代码会评估intResult1BEFOREintResult0(使用最新的VC和gcc测试)。为什么编译器会这样做?通过这样做,评估和使用各个值之间的时间(不必要地)增加(?),即首先获取42,但最后推送到vector。C++标准是否规定了这一点? 最佳答案 两个序列点之间的子表达式求值顺序未定义。上面的代码是语法糖:v.operator编译器的唯一约束是它必须在调用方法之前评估所有参数并遵守优先规则。但只要遵循这些规则,每个实