以下代碼不會編譯。爲什麼?不可能:該指針作爲默認參數。爲什麼?
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);
}
以下代碼不會編譯。爲什麼?不可能:該指針作爲默認參數。爲什麼?
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);
}
默認參數值在編譯時綁定。
「this」僅在運行時定義,因此無法使用。
在這裏看到一個更全面的解釋: Must default function parameters be constant in C++?
但爲什麼C++是這樣設計的,默認參數必須在編譯時綁定?... – alexandreC
@alexandreC這是另一個問題。 –
其他人已經發表了評論不起作用的原因。從一個評論:
」 ......表達可以結合是在 電流範圍,常量表達式和全局變量可見函數 表達式不能包含局部變量和非靜態講座。成員 變量...」
你可以使用optional
,以消除多餘的功能,雖然我不知道它更清晰:
void f(boost::optional<int> i = boost::none) { if(!i) i = j; ... }
你甚至想在這裏做什麼? –
因爲實例不在參數聲明中的範圍內......? –
「...表達式可以組合當前範圍中可見的函數,常量表達式和全局變量。表達式不能包含局部變量或非靜態類成員變量...」 –