1
void foo(Type1 a, Type2 b = value2)

我可以知道 Type2 作为接受默认值的参数有什么限制吗?我认为 type2 的 value2 应该在编译时确定。例如,一个整数。这个对吗?

4

3 回答 3

1

value2必须在编译时可转换为Type2.

于 2013-12-20T15:59:13.660 回答
1

你有很大的灵活性。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);
于 2013-12-20T16:16:05.750 回答
0

是,对的。

唯一的限制是默认变量应该是最后一个。您可以有多个默认变量,只需确保将它们全部保留在最后。不要与非默认的混合。

于 2013-12-20T16:12:10.673 回答