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);

10-04 14:29