0

我想做类似的事情

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++ 能力。

4

2 回答 2

3

这不起作用的原因是,这

void A (int a[2]) {}

只是简写符号

void A (int* a) {}

您不能将数组按值传递给函数。它们确实衰减到指向第一个元素的指针。如果你使用 astd::array<int,2>你可以很容易地提供一个默认参数:

void foo(std::array<int,2> x = {2,2}) {}
于 2021-10-07T12:40:14.970 回答
0

此外,您可以通过 const 引用传递原始数组:

void A(const int (&arr)[2] = {2, 2})
{}
于 2021-12-02T11:25:14.900 回答