void foo(Type1 a, Type2 b = value2)
我可以知道将Type2设置为接受默认值的参数有哪些限制吗?我认为type2的value2在编译时应该是可确定的。
例如,整数。它是否正确?
最佳答案
您具有很大的灵活性。 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);