1

最好用代码解释:

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

有什么区别?

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

2 回答 2

4

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

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

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

即没有static限定符。

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


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

于 2013-03-18T13:49:33.603 回答
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
}
于 2013-03-18T13:49:43.733 回答