2013-12-20 74 views
1
void foo(Type1 a, Type2 b = value2) 

我可以知道Type2作爲接受默認值的參數的限制嗎?我認爲type2的value2在編譯時應該是可判定的。 例如,一個整數。它是否正確?C++中默認參數類型的限制是什麼

+0

是的,這是正確的。需要在編譯時在[tag:C++]中看到任何類型和常量轉換。 –

回答

1

你有相當多的靈活性。 value2需要是一個在函數聲明處有效的表達式(通過「有效」我的意思是它使用的名稱在範圍內等),其類型必須可以隱式轉換爲Type2,與任何初始化。每次調用函數時都會評估value2。因此,例如:

#include <vector> 
#include <iostream> 

int i; 

void foo(std::vector<int> v = std::vector<int>(i)) { 
    std::cout << v.size() << "\n"; 
} 

int main() { 
    i = 1; 
    foo(); 
    i = 2; 
    foo(); 
} 

有了正確的初始化,Type2甚至可以是引用類型:

void bar(int &j = i); 
+0

好的,我明白了。所以基本上,默認值可以是在運行時評估的,並且每次調用該函數時都會在運行時進行評估。 – KKKoo0

+0

@ KKKoo0。是。嘗試聲明全局'int i'並使用'i ++'作爲默認值。 – MSalters

1

value2必須編譯時轉換爲Type2

0

是的。

唯一的限制是默認變量應該是最後一個。你可以有多個默認變量,只要確保把它們全部留在最後。不要與非默認設備混合使用。

相關問題