c++ - 为什么这个右值引用绑定(bind)到左值?

标签 c++ c++14 language-lawyer rvalue-reference decltype

我不明白为什么以下代码在 GCC 8.0 上编译:

decltype(auto) foo(int&& r) {
    return r;
}

foo中,r的声明类型为int&&,所以foo的返回类型为还有 int&&。但是r本身就是一个左值,左值不能绑定(bind)到右值引用。

我错过了什么吗?

最佳答案

根据[dcl.spec.auto]/5 ,则推导出返回类型,就好像 return 语句的操作数是 decltype 的操作数一样。和[dcl.type.simple]/(4.2)明确指出,由于操作数没有括号,实体的类型是decltype产生的类型,即int&&。事实上, r 是一个左值( [expr.prim.id.unqual] )。

幸运的是,这已被发现并归档为 bug 64892两年前。 (我想知道为什么没有人能抽出时间来解决这个问题?)

关于c++ - 为什么这个右值引用绑定(bind)到左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532034/

相关文章:

C++ 从 HTTP 响应中获取图片

c++ - 如何通过 val 从 std::deque 中删除函数指针?

c++ - 在 `expressions` 类中处理对 `vector_binary_operation` 的引用,而没有不必要的拷贝

c++ - 局部静态变量初始化是线程安全的

c++ - 如何将数字转换为整数 vector ?

c++ - 递归尾随返回类型的名称解析

c++ - 在头文件中声明全局常量对象

c++ - 存储在类中的闭包中通过引用捕获的临时对象的生命周期

c - 自动将结构成员初始化为 NULL

c++ - 对象如何成为子对象?