奇怪的声明(模板).C++

The*_* do 6 c++ templates

我如何理解这里声明的内容:(这是从本论坛的其他帖子中获取的)

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
Run Code Online (Sandbox Code Playgroud)

这是我的阅读方式:

静态函数的模板f调用(ChT<int Fallback::*, &C::x>*),但后来我无法理解为什么有一个地址运算符,为什么有一个数组?

我还在学习如何理解C++声明,所以请慢慢仔细地解释一下.

sth*_*sth 7

使用一些typedef:

typedef char (&arrayref_t)[1];
Run Code Online (Sandbox Code Playgroud)

这是对字符数组的引用.该数组有一个元素.

typedef ChT<int Fallback::*, &C::x> tmpl_t;
Run Code Online (Sandbox Code Playgroud)

这是一个模板类,具有类型"指针,实例化的int所述的构件Fallback类",和一个构件指针xC.

static arrayref_t f(tmpl_t*);
Run Code Online (Sandbox Code Playgroud)

该函数现在采用指向a的指针tmpl_t并返回一个arrayref_t.


Ale*_*tov 3

查看返回类型很重要。因此,该函数的返回类型是对char[1];的引用。想象一下f返回类似以下内容的引用:

char ret[1];
Run Code Online (Sandbox Code Playgroud)

例如

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1]
{

   static char xx[1] = {'F'};
   return xx;
}
Run Code Online (Sandbox Code Playgroud)