правила с временными объектами и аргументами по ссылке - PullRequest
2 голосов
/ 02 апреля 2009

говорят, что у меня есть класс:

class A
{
 public:
 A() {}
};

и функция:

void x(const A & s) {}

и я делаю:

x(A());

Может кто-нибудь объяснить мне правила передачи временных объектов по ссылке? С точки зрения того, что позволяет компилятор, где вам нужно const, если происходит неявное копирование и т. Д. При воспроизведении кажется, что вам нужен const, который имеет смысл, но есть ли формальное правило относительно всего этого?

Спасибо!

Ответы [ 3 ]

9 голосов
/ 02 апреля 2009

Существует формальное правило - Стандарт C ++ (раздел 13.3.3.1.4, если вам интересно) гласит, что временное может быть связано только с константной ссылкой - если вы пытаетесь использовать неконстантную ссылку, компилятор должен пометить это как ошибку.

8 голосов
/ 02 апреля 2009

Херб Саттер прекрасно объясняет это здесь: http://www.gotw.ca/gotw/081.htm

1 голос
/ 02 апреля 2009

x () должен либо принимать константную ссылку на временный A, либо x () должен принимать побочное значение A.

...