为什么 "size_of_array" 模板函数不能与 int a[n](运行时定义的大小)一起使用,而它与 int a[4] 一起工作?
Why does the "size_of_array" template fucntion does not work with int a[n] (size defined at runtime) while it works fine with int a[4]?
template <typename T, int n >
int tell_me_size(T (&) [n]){
return n;
}
此代码适用于
int a[4];
cout<< tell_me_size(a)<<endl;
while 不适用于
int n;
cin>>n;
int a[n];
cout<< tell_me_size(a)<<endl;
后面报错“no matching function for call to ‘tell_me_size(int [n])”
根据 C++ 20 标准(13.4.3 模板 non-type 参数)
2 A template-argument for a non-type template-parameter shall be a
converted constant expression (7.7) of the type of the
template-parameter.
注意像这样的变长数组
int n;
cin>>n;
int a[n];
不是标准的 C++ 功能。
template <typename T, int n >
int tell_me_size(T (&) [n]){
return n;
}
此代码适用于
int a[4];
cout<< tell_me_size(a)<<endl;
while 不适用于
int n;
cin>>n;
int a[n];
cout<< tell_me_size(a)<<endl;
后面报错“no matching function for call to ‘tell_me_size(int [n])”
根据 C++ 20 标准(13.4.3 模板 non-type 参数)
2 A template-argument for a non-type template-parameter shall be a converted constant expression (7.7) of the type of the template-parameter.
注意像这样的变长数组
int n;
cin>>n;
int a[n];
不是标准的 C++ 功能。