我想做一些像
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})
{}