右值引用变量是左值

反直觉C++🔥, 👏欢迎github star

右值引用变量是左值

#include <iostream>

void fun(const int& lref)  {
    std::cout << "l-value reference to const: " << lref << '\n';
}

void fun(int&& rref) {
    std::cout << "r-value reference: " << rref << '\n';
}

int main() {
    fun(5);

    int x{5};
    fun(x); 

    int& y{x};
    fun(y);

    int&& z{5};
    fun(z);

    return 0;
}

输出

r-value reference: 5
l-value reference to const: 5
l-value reference to const: 5
l-value reference to const: 5

5是右值,fun(5,会选择fun(int&&)版本。
x是左值,fun(x),会选择fun(const int&)版本。
y是左值引用,fun(y),会选择fun(const int&)版本。
z是右值引用,fun(z),会选择fun(const int&)版本?z不是右值引用吗?怎么选择了左值引用版本,有点反直觉。

奇怪的知识增加了

虽然变量z的类型是int&&,但在表达式中它是一个左值(所有命名变量都是这样)。对象的类型和其值类别是独立的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容