返回静态变量时静态const和static的区别

时间:2013-03-18 13:46:40

标签: c++ static const static-methods

最好在代码中解释:

static Unit& None() { static Unit none(....); return none;}

有什么不同?

static const Unit& None() { static Unit none(....); return none;}

2 个答案:

答案 0 :(得分:4)

函数前面的static与函数 1 中的static完全不同。特别是,与返回类型完全无关。这些函数的返回类型与此处相同:

Unit& None() { static Unit none(....); return none;}

const Unit& None() { static Unit none(....); return none;}

即。没有static限定符。

因此差异仅在Unit&Unit const&之间:第一个允许修改返回值,第二个不允许。


1)对于类成员,static表示该函数不能访问该类的实例变量和实例函数;在命名空间范围函数上,static表示不从编译单元导出函数符号。

答案 1 :(得分:2)

您正在返回对静态对象/变量的引用。因此可以为函数赋值,然后更改该对象/变量的值。

第二个人拒绝改变none的价值:

static int& func1()
{
    static int a = 1; return a;
}

static const int& func2()
{
    static int a = 1; return a;
}

int main()
{
    func1() = 10;    // OK
    func2() = 10;    // error: assignment of read-only location
}