我正在学习 C++ 模板概念。我不明白以下内容。
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
T fun(T& x)
{
cout <<" X is "<<x;
cout <<"Type id is "<<typeid(x).name()<<endl;
}
int main ( int argc, char ** argv)
{
int a[100];
fun (a);
}
我在尝试什么?
1) T 乐趣 (T & x)
这里 x 是一个引用,因此不会将 'a' 衰减为指针类型,
但在编译时,我收到以下错误。
error: no matching function for call to ‘fun(int [100])’
当我尝试非引用时,效果很好。据我了解,数组已退化为指针类型。
C 风格数组是非常基本的构造,不能像内置类型或用户定义类型那样进行赋值、复制或引用。要达到通过引用传递数组的等效效果,您需要以下语法:
// non-const version
template <typename T, size_t N>
void fun( T (&x)[N] ) { ... }
// const version
template <typename T, size_t N>
void fun( const T (&x)[N] ) { ... }
请注意,这里数组的大小也是一个模板参数,以允许函数在所有数组大小上工作,因为T[M]
and T[N]
对于不同的情况来说不是同一类型M
, N
。另请注意,该函数返回 void。正如已经提到的,无法按值返回数组,因为数组不可复制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)