zoukankan      html  css  js  c++  java
  • 右值引用

    右值和右值引用

    右值,即可出现在赋值表达式右边,但不能对其应用地址运算符的值。右值包括字面常(C-风格字符手除外,它表示地址)、诸如x+y等表达式以及返回值的函数(条件是该函数返回的不是引用):
    C++11新增了右值引用,这是使用&&表示的。右值引用可关联到右值。

    int x = 10;
    int y = 23;
    int && r1 = 13;
    int && r2 = x + y;
    double && r3 = std::sqrt(2.0);
    

    注意,r2关联到的是当时计算x+y得到的结果。也就是说r2关联到的是23,即使以后修改了x或y,也不会影响到r2
    有趣的是,将右值关联到右值引用导致该右值被存储到特定的位了置,也可以取该位置的地址,也就是说虽然不能将运算符&用于13,但可将其用于r1,通过将数据与特定的地址关联,使得可以通过右值引用来访问该数据。

    #include <iostream>
    inline double f(double tf)(return 5. 0*(tf-32.0/9.0;);
    int main()
    {
    	using namespace stdi
    	double tc=21.5;
    	double && rd1 = 7.07;
    	double && rd2=1.8 * tc + 32.0;
    	double && rd3=f(rd2);
    	cout <<"tc value and address: " << tc << "," << &tc <<endl;
    	cout <<"rd1 value and address: " << rd1 << "," << &rd1 <<endl;
    	cout <<"rd2 value and address: " << rd2 << "," << &rd2 <<endl;
    	cout <<"rd3 value and address: " << rd3 << "," << &rd3 <<endl;
    
    	cin.get();
    	return 0;
    }
    
    

    该程序的输出如下
    tc value and address: 21. 5, 002FF744
    rd1 value and address: 7.07, 002FF728
    rd2 value and address: 70.7. 002FF70C
    rd3 value and address: 21.5 002FF6F0

    引入右值引用的主要目的之一是实现移动语义。

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

  • 相关阅读:
    Mysql中类型转换函数Cast()的用法
    Spark scala 删除指定列为Na的行
    R语言之变量动态赋值
    MAC 把隔空投送添加到个人收藏边栏
    R查看变量数据类型 typeof()
    R Rstudio生成HTML报告
    Rstudio 添加定时任务
    R Studio编译一个包package
    Linux sed删除文件后几行
    Github添加自我介绍-新建一个和用户名同名的仓库并添加README.md即可
  • 原文地址:https://www.cnblogs.com/Corphish/p/8805557.html
Copyright © 2011-2022 走看看