правила с временными объектами и аргументами по ссылке
Вопрос
скажем, у меня есть занятие:
class A
{
public:
A() {}
};
и функция:
void x(const A & s) {}
и я делаю:
x(A());
не мог бы кто-нибудь, пожалуйста, объяснить мне правила, касающиеся передачи временных объектов по ссылке?С точки зрения того, что допускает компилятор, где вам нужен const, происходит ли неявное копирование и т.д.Из игры кажется, что вам нужен const, который имеет смысл, но существует ли формальное правило относительно всего этого?
Спасибо!
Решение
Существует формальное правило - стандарт C ++ (раздел 13.3.3.1.4, если вам интересно) гласит, что временное значение может быть привязано только к постоянной ссылке - если вы пытаетесь использовать неконстантную ссылку, компилятор должен пометить это как ошибку.
Другие советы
Херб Саттер прекрасно справляется с объяснением этого здесь: http://www.gotw.ca/gotw/081.htm
x() должен либо принимать постоянную ссылку на временный A, либо x() должен принимать A по значению.