如果我的 C++ 类重载了按位或运算符 ( |
),C++ 语言规范是否保证传递给对该运算符的一系列调用的参数将从左到右进行评估?或者评估顺序是定义的(或未定义的)?
(IIRC C++ 的内置|
运算符具有实现定义的求值顺序;但是当运算符为类重载时可能会有所不同?)
下面是一个举例说明我要问的程序:这个程序是否保证打印出来0 1 2 3 4
(就像它在我目前坐在的 Mac 上所做的那样),或者它是否可以4 3 2 1 0
在某些环境中合法地打印出来(或其他一些顺序)?
#include <iostream>
class mytype_t
{
public:
mytype_t(int v) : _val(v) {/* empty */}
mytype_t operator | (const mytype_t & rhs) const {return (_val | rhs._val);}
private:
int _val;
};
mytype_t func(int v)
{
std::cout << v << std::endl;
return mytype_t(v);
}
int main(int, char **)
{
mytype_t x = func(0) | func(1) | func(2) | func(3) | func(4);
return 0;
}