Рассмотрим следующий код:C++ оператор сдвига преимущество странность
typedef vector<int> intVec;
intVec& operator<<(intVec& dst, const int i) {
dst.push_back(i);
return dst;
}
int intResult0() {
return 23;
}
int intResult1() {
return 42;
}
// main
intVec v;
v << intResult0() << intResult1();
Странно то, что компилятор генерирует код, который оценивает intResult1
ПЕРЕДintResult0
(проверено с новейшей VC унд GCC). Зачем компилятору это делать? Таким образом, время между оценкой и использованием соответствующих значений (без необходимости) увеличивается (?), То есть 42 выбирается сначала, а затем возвращается последнему к вектору. Определяет ли стандарт C++?
хех, я побежал в эту последнюю ночь с оператором + = T он сбивает меня с толку: чтение кода, который вы ожидаете, что intResult1 нужно назвать вторым, потому что он использует значение, возвращаемое intResult0 для его первого аргумента. – Dolphin