void fn() {}
void (&lref)() = fn;
void (&&rref)() = fn;
int main() {}
可以在g++ 4.8.1下成功编译。
所以,fn
是一个表达式,根据ISO标准,表达式必须有一个类别。
在执行任何自动类型提升之前,这个表达式属于哪个类别(因为两个引用都可以接受评估表达式fn
的结果)?
void fn() {}
void (&lref)() = fn;
void (&&rref)() = fn;
int main() {}
可以在g++ 4.8.1下成功编译。
所以,fn
是一个表达式,根据ISO标准,表达式必须有一个类别。
在执行任何自动类型提升之前,这个表达式属于哪个类别(因为两个引用都可以接受评估表达式fn
的结果)?
fn
是lvalue。const
),或者引用应该是rvalue引用。T1
”与“cv2T2
”兼容,那么在第一种情况下引用将被绑定到初始化表达式的值中...
fn
是一个函数,因此是一个左值。而且,fn
评估为一个与对象无关的值(参见第1.8节:函数不是一个对象),因此是一个右值。这就是事实吗? - Tadeus Prastowofn
必须是左值或右值之一,不能同时是两者。那么,表达式fn
是左值还是右值? - Tadeus Prastowofn
是一个左值),为什么void (&&rref)() = fn;
会编译通过? - Tadeus Prastowo