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

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

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

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/Corphish/p/8805557.html
Copyright © 2011-2022 走看看