void foo(Type1 a, Type2 b = value2)
我可以知道 Type2 作为接受默认值的参数有什么限制吗?我认为 type2 的 value2 应该在编译时确定。例如,一个整数。这个对吗?
void foo(Type1 a, Type2 b = value2)
我可以知道 Type2 作为接受默认值的参数有什么限制吗?我认为 type2 的 value2 应该在编译时确定。例如,一个整数。这个对吗?
value2
必须在编译时可转换为Type2
.
你有很大的灵活性。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);
是,对的。
唯一的限制是默认变量应该是最后一个。您可以有多个默认变量,只需确保将它们全部保留在最后。不要与非默认的混合。