有关返回const引用的问题

时间:2018-11-19 01:34:59

标签: c++

const Date& default_date()
{
    static const Date dd{1970, 1, 1};
    return dd;
}

我正在阅读Stroustrup的书,但上面的代码却听不到。 这是关于在构造函数中提供默认值。

我的问题是

  1. 该函数通过引用返回局部变量。函数结束时变量不应该超出范围吗?
  2. 即使它没有超出范围,由于静态变量仅初始化一次并且该函数通过引用返回,因此如果您两次向该函数提供默认值,它们将不会共享相同的地址因此使它们不明显?

2 个答案:

答案 0 :(得分:4)

在函数中定义静态变量时,它们只会被构造一次:第一次调用该函数时。由于变量具有静态持续时间,因此它位于内存的不同区域中,而不是位于堆栈上。它会一直保留在内存中,直到您的程序退出为止,这时所有本地定义的静态变量都将按照其创建的相反顺序销毁。

如果您想阅读C ++标准关于它的内容,请从这里开始:

答案 1 :(得分:0)

事实证明,您的第二个问题回答了第一个问题。是的,static局部变量会在函数的多次调用中停留,这就是引用保持有效的原因。

对于第二个,这是正确的,这两个引用将指向同一对象。由于它们是const,就像它们所引用的对象一样,所以通常这不是问题。