void foo(Type1 a, Type2 b = value2)
我可以知道Type2作爲接受默認值的參數的限制嗎?我認爲type2的value2在編譯時應該是可判定的。 例如,一個整數。它是否正確?C++中默認參數類型的限制是什麼
void foo(Type1 a, Type2 b = value2)
我可以知道Type2作爲接受默認值的參數的限制嗎?我認爲type2的value2在編譯時應該是可判定的。 例如,一個整數。它是否正確?C++中默認參數類型的限制是什麼
你有相當多的靈活性。 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);
value2
必須編譯時轉換爲Type2
。
是的。
唯一的限制是默認變量應該是最後一個。你可以有多個默認變量,只要確保把它們全部留在最後。不要與非默認設備混合使用。
是的,這是正確的。需要在編譯時在[tag:C++]中看到任何類型和常量轉換。 –