使用初始值设定项列表作为 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})
{}