【发布时间】:2026-02-03 21:00:01
【问题描述】:
为什么std::size() 不适用于按值传递的静态分配数组?
void print_elemTab(int tab[])
{
// ...
int size = std::size(tab); //error
// ...
}
void test_tab()
{
const int TAB_SIZE = 5;
int tab[TAB_SIZE] = {};
// ...
cout << std::size(tab) << std::endl; //print 5
print_elemTab(tab);
// ...
}
我正在打印尺寸,然后在子函数print_elemTab() 中传递tab,我再次使用std::size()。
我得到没有匹配函数错误,所以我想知道为什么std::size() 第一次在test_tab() 中起作用,而不是在print_elemTab() 中
我必须通过引用传递它吗?那么除了任意长度的数组,我该怎么做呢?
或者我是否因为我不知道的事情而不得不以另一种方式做到这一点?
【问题讨论】:
-
在函数参数列表中,
int tab[]的含义与int *tab完全相同。所以你传递的是一个指针而不是一个数组。 -
或者更改为
void print_elemTab(int tab[], std::size_t n)并拨打print_elemTab(tab, std::size(tab))。
标签: c++ arrays c++17 pass-by-reference