Я понимаю, что когда я вызываю такую функцию, как
a(b(),c());
, поведение этого может быть неопределенным в <= C ++ 14 и неопределенным в> = C ++ 17 в том смысле,что компилятор должен определить, нужно ли сначала b
или c
оценивать.
Я хотел бы знать, как лучше навести порядок оценки.Я буду компилировать как C ++ 14.
То, что сразу приходит на ум, примерно так:
#include <iostream>
int count = 5;
auto increment(){
return count++;
}
template <typename A, typename B>
auto diff(A && a, B && b){
return a - b;
}
int main() {
auto && a = increment();
auto && b = increment();
auto c = diff(a,b);
}
Я в неопределенном поведении, приземляюсь?Или это, как предполагается, «заставить» порядок оценки?