编译器错误 C3854

“=”左侧的表达式计算为函数。 无法分配到函数(函数不是左值)

无法重新初始化引用。 取消引用对函数的引用会生成一个函数,该函数是一个无法向其赋值的 rvalue。 因此,无法通过对函数的引用进行赋值。

下面的示例生成 C3854:

// C3854.cpp
int afunc(int i)
{
   return i;
}

typedef int (& rFunc_t)(int);
typedef int (* pFunc_t)(int);

int main()
{
   rFunc_t rf = afunc;   // OK binding a reference to function
   pFunc_t pf = &afunc;   // OK initializing a pointer to function

   *pf = &afunc;   // C3854
   // try the following line instead
   // pf = &afunc;
   *rf = &afunc;   // C3854
}