2013-03-18 126 views
1

它在代码最好的解释:差异静态常量和静态的返回时,一个静态变量

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

的区别是什么来?

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

你问的区别是什么'股'&和'常量单位&'之间? – 2013-03-18 13:47:42

+1

正如@DrewDormann所说的那样,'const'和'Unit&'一起,而不是'static'。 – Xymostech 2013-03-18 13:48:24

回答

4

在函数前的static具有从static函数内完全不同的。尤其是,与退货类型完全无关。这些功能的返回类型与此处相同:

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

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

即,没有static限定符。

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


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

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 
}