2012-10-10 138 views
5

以下代碼不會編譯。爲什麼?不可能:該指針作爲默認參數。爲什麼?

class A 
{ 
    int j; 
    void f(int i = this->j); 
} 

編輯,爲清楚起見。這是我試圖做的,使用較少的代碼行...

class A 
{ 
    void f(int i){}; 
    void f(); 
    int j; 
}; 

void A::f() 
{ 
    f(j); 
} 
+2

你甚至想在這裏做什麼? –

+3

因爲實例不在參數聲明中的範圍內......? –

+2

「...表達式可以組合當前範圍中可見的函數,常量表達式和全局變量。表達式不能包含局部變量或非靜態類成員變量...」 –

回答

6

默認參數值在編譯時綁定。

「this」僅在運行時定義,因此無法使用。

在這裏看到一個更全面的解釋: Must default function parameters be constant in C++?

+0

但爲什麼C++是這樣設計的,默認參數必須在編譯時綁定?... – alexandreC

+0

@alexandreC這是另一個問題。 –

0

其他人已經發表了評論不起作用的原因。從一個評論:

」 ......表達可以結合是在 電流範圍,常量表達式和全局變量可見函數 表達式不能包含局部變量和非靜態講座。成員 變量...」

你可以使用optional,以消除多餘的功能,雖然我不知道它更清晰:

void f(boost::optional<int> i = boost::none) { if(!i) i = j; ... }

相關問題