通过引用访问默认实参是否安全

Is it safe to access a default argument by reference?

本文关键字:实参 是否 安全 默认 访问 引用      更新时间:2023-10-16

我有一个函数,看起来像这样:

class SomeClass {
    // ...
};
void some_function(const SomeClass& arg = SomeClass());

函数some_function通过引用访问它的实参,并且有一个默认值。这样做是否安全,或者当我在没有参数的情况下调用函数时,引用是否无效?

是的,它是安全的。绑定到临时对象的const引用将该临时对象的生命周期延长到引用的生命周期。右值引用也是如此。

将有效。作为默认值使用的临时对象的生命周期是函数调用生命周期的超集。这与显式传递临时参数没有什么不同(默认参数基本上是语法糖,可以节省输入,但行为与显式传递的参数或多或少相同)。