Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中默认参数的类型有哪些限制+;_C++_Default Parameters - Fatal编程技术网

C++ C+;中默认参数的类型有哪些限制+;

C++ C+;中默认参数的类型有哪些限制+;,c++,default-parameters,C++,Default Parameters,我可以知道Type2作为接受默认值的参数有哪些限制吗?我认为type2的值2在编译时应该是可判定的。 例如,一个整数。这是正确的吗 value2必须在编译时转换为Type2是正确的 唯一的限制是默认变量应该是最后一个。您可以有多个默认变量,只需确保将它们全部保留在末尾即可。不要与非默认值混用 你有很大的灵活性value2需要是一个在函数声明点有效的表达式(所谓“有效”是指它使用的名称在范围内等),并且它的类型必须隐式转换为Type2,与任何初始值设定项相同值2。例如: void foo(Type

我可以知道Type2作为接受默认值的参数有哪些限制吗?我认为type2的值2在编译时应该是可判定的。
例如,一个整数。这是正确的吗

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