Я не нашел подходящих терминов в разделе «Порядок вычисления». Так не определено ли поведение функции g в приведенном ниже коде? [code]int x; int f() { return x++; } void g() { x = f(); } [/code] Я скомпилировал код на другой платформе и с разными аргументами, и это показало, что x всегда оставался неизменным.
Обратите внимание: я не спрашиваю: «Когда создаются экземпляры шаблонов функций?» Скорее, «Когда будут видны побочные эффекты этого создания экземпляра?»
Примером побочного эффекта создания экземпляра может быть внедрение друзей. Например:
// Same...
Мы все знаем, что выражение i++ + i++ представляет собой неопределенное поведение. Но является ли это также UB, если побочные эффекты возникают при ссылке в теле функции? Например:
int f(int& i) { // pass by reference
return i++;
}
Мы все знаем, что выражение i++ + i++ представляет собой неопределенное поведение. Но является ли это также UB, если побочные эффекты возникают при ссылке в теле функции? Например:
int f(int& i) { // pass by reference
return i++;
}