使用初始化列表作为函数/方法参数的默认值



我想做一些像

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})
{}

最新更新