rvalue对函数类型的引用

时间:2015-05-29 04:44:44

标签: c++ rvalue

众所周知,返回类型的函数调用是函数的rvlaue是左值。

  

如果结果类型是左值引用,则函数调用是左值   对函数类型的类型或右值引用,如果是结果则为xvalue   type是对象类型的右值引用,否则是prvalue。

#include <iostream>

int a(){ return 1; }

int foo(){ return 1; }

int (&&bar())(){ return a; }

int main()
{
    bar() = foo; //error: cannot convert 'int()' to 'int()' in assignment
}

该诊断消息有什么问题?

1 个答案:

答案 0 :(得分:6)

强调我的,[expr.ass] / 1:

  

赋值运算符(=)和复合赋值运算符从右到左分组。都需要一个   可修改左值作为左操作数并返回左值操作数的左值...

[basic.lval] / 6:

  

无法修改函数,但可以修改指向函数的指针。

所以你可能有一个引用函数的左值,但它不是可修改的左值,并且不能用于修改函数。

诊断信息......留下了一些需要的东西。 Clang 3.6说,

  

错误:非对象类型&#39; int()&#39;不可分配

更清楚。