2013-03-18 140 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 
}