在下面的代码中,std::extent<decltype(columns)>::value
计算给定数组的长度。但是,当数组是函数参数时,编译器的行为方式不同。有人可以帮我解决一下吗?
输出:
local array length: 5
function array length: 0
代码:
#include <iostream>
#include <string>
void showcolumns_num(std::string columns[])
{
int columns_num=std::extent<decltype(columns)>::value;
std::cout<<"function array length: "<<columns_num<<std::endl;
}
int main()
{
std::string column_list[]={"col1","col2","col3","col4","col5"};
// local calculation of column number
int columns_num=std::extent<decltype(column_list)>::value;
std::cout<<"local array length: "<<columns_num<<std::endl;
// function calculation of column number
showcolumns_num(column_list);
return 0;
}
最佳答案
您必须通过引用传递数组以避免指针衰减从而丢失大小信息:
template <std::size_t N>
void showcolumns_num(std::string (&columns)[N])
关于c++ - 局部数组长度与从函数调用时不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317624/