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++]中看到任何类型和常量转换。 –