правила с временными объектами и аргументами по ссылке

StackOverflow https://stackoverflow.com/questions/710807

Вопрос

скажем, у меня есть занятие:

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 по значению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top