Если мой класс 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;
}