Безопасно ли обращаться к аргументу по умолчанию по ссылке?

#c

#c

Вопрос:

У меня есть функция, которая выглядит следующим образом:

 class SomeClass {
    // ...
};

void some_function(const SomeClassamp; arg = SomeClass());
  

Функция some_function обращается к своему аргументу по ссылке и имеет значение по умолчанию. Безопасно ли это делать, или ссылка будет недействительной, когда я вызываю функцию без аргумента?

Комментарии:

1. Для меня удивительно видеть, что пользователь 14K задает этот вопрос!! (без обид)

2. @mavric: Кто сказал, что репутация была заработана, отвечая на вопросы C ? Репутация человека довольно незначительна — поверьте мне, у меня 26 тысяч!

3. @mavric Я программист на Java / Scala, прошло много времени с тех пор, как я написал какую-либо серьезную программу на C , поэтому мой C немного подзабылся. Я просто играю с этим снова в качестве хобби.

4. @DeadMG: Да, теперь я это вижу!!

Ответ №1:

Да, это безопасно. Постоянная ссылка, привязанная к временному, продлевает срок службы этого временного значения до срока службы ссылки. То же самое верно и для ссылок на значения rvalue.

Ответ №2:

Это будет допустимо. Время жизни временного значения, используемого в качестве значения по умолчанию, является надмножеством времени жизни вызова функции. Это также ничем не отличается от того, если бы вы передали временный параметр явно (аргументы по умолчанию — это в основном синтаксический сахар, избавляющий вас от ввода, но ведут себя более или менее идентично аргументам, переданным явно.