#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:
Это будет допустимо. Время жизни временного значения, используемого в качестве значения по умолчанию, является надмножеством времени жизни вызова функции. Это также ничем не отличается от того, если бы вы передали временный параметр явно (аргументы по умолчанию — это в основном синтаксический сахар, избавляющий вас от ввода, но ведут себя более или менее идентично аргументам, переданным явно.