使用初始值设定项列表作为 function/method 参数的默认值
Use initializer list as default value for function/method parameter
我想做类似的事情
void A (int a[2] = {0,0}) {}
但我明白了
<source>(1): error C2440: 'default argument': cannot convert from 'initializer list' to 'int []'
<source>(1): note: The initializer contains too many elements
(最新的 MSVC v19 x64,也不适用于 gcc x86-64 11.2)
同样,我想不出 c++ 有什么能力可以被认为是这里的正确语法。
这不起作用的原因是这个
void A (int a[2]) {}
只是
的简写
void A (int* a) {}
您不能按值将数组传递给函数。它们确实会衰减到指向第一个元素的指针。如果您使用 std::array<int,2>
,您可以轻松提供默认参数:
void foo(std::array<int,2> x = {2,2}) {}
此外,您可以通过 const 引用传递原始数组:
void A(const int (&arr)[2] = {2, 2})
{}
我想做类似的事情
void A (int a[2] = {0,0}) {}
但我明白了
<source>(1): error C2440: 'default argument': cannot convert from 'initializer list' to 'int []'
<source>(1): note: The initializer contains too many elements
(最新的 MSVC v19 x64,也不适用于 gcc x86-64 11.2)
同样,我想不出 c++ 有什么能力可以被认为是这里的正确语法。
这不起作用的原因是这个
void A (int a[2]) {}
只是
的简写void A (int* a) {}
您不能按值将数组传递给函数。它们确实会衰减到指向第一个元素的指针。如果您使用 std::array<int,2>
,您可以轻松提供默认参数:
void foo(std::array<int,2> x = {2,2}) {}
此外,您可以通过 const 引用传递原始数组:
void A(const int (&arr)[2] = {2, 2})
{}