C++ C+;中默认参数的类型有哪些限制+;
我可以知道Type2作为接受默认值的参数有哪些限制吗?我认为type2的值2在编译时应该是可判定的。C++ C+;中默认参数的类型有哪些限制+;,c++,default-parameters,C++,Default Parameters,我可以知道Type2作为接受默认值的参数有哪些限制吗?我认为type2的值2在编译时应该是可判定的。 例如,一个整数。这是正确的吗 value2必须在编译时转换为Type2是正确的 唯一的限制是默认变量应该是最后一个。您可以有多个默认变量,只需确保将它们全部保留在末尾即可。不要与非默认值混用 你有很大的灵活性value2需要是一个在函数声明点有效的表达式(所谓“有效”是指它使用的名称在范围内等),并且它的类型必须隐式转换为Type2,与任何初始值设定项相同值2。例如: void foo(Type
例如,一个整数。这是正确的吗
value2
必须在编译时转换为Type2
是正确的
唯一的限制是默认变量应该是最后一个。您可以有多个默认变量,只需确保将它们全部保留在末尾即可。不要与非默认值混用 你有很大的灵活性
value2
需要是一个在函数声明点有效的表达式(所谓“有效”是指它使用的名称在范围内等),并且它的类型必须隐式转换为Type2
,与任何初始值设定项相同<每次调用函数时都会计算代码>值2。例如:
void foo(Type1 a, Type2 b = value2)
是的,没错。任何类型和常量转换都需要在编译时在中查看。好的,我明白了。所以基本上,默认值可以是在运行时计算的值,并且每次调用该函数时都会在运行时计算?@KKKoo0。对尝试声明一个全局
inti
,并使用i++
作为默认值。
#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();
}
void bar(int &j = i);