2017-03-25 222 views
3
void g(int n, decltype(n) = 0); // ok 
void f(int n, int = n); // error : default argument references parameter 'n' 

int main() 
{ 
    f(1); // want it to be same as f(1, 1); 
} 

爲什麼C++不允許參數成爲默認參數?爲什麼C++不允許參數成爲默認參數?

原理是什麼?

+0

我不知道,如果我得到這個錯誤,但** void f(int n,int = n); **有一個語法錯誤,此外,你不應該指定一個函數中的整數如果未初始化,則爲另一個整數。嘗試聲明一個全局變量int x = 1,然後將其分配爲默認參數。 – Weaboo

+1

我重新打開了。這個副本沒有說明這個背後的原因。 – juanchopanza

回答

10

該限制的一個經常引用的潛在基本原理如下:允許參數作爲默認參數需要在參數評估上施加至少部分排序。在其他參數中用作默認參數的參數必須首先進行評估。同時,C++繼續堅持原始參數評估方法:參數在未指定的順序中進行評估。

可以用同樣的推理來解釋爲什麼在成員函數的默認參數中不能引用類成員:這會對隱含參數this的評估施加一些排序要求。

相關問題