c++11 新特性 右值引用实验 简单实验

本文介绍了C++11中右值引用的新特性,探讨了其与左值的区别,以及如何通过移动、字面值常量和函数返回值创建右值引用,以提高效率。
摘要由CSDN通过智能技术生成

1.概要

c++11 新特性 右值引用实验

右值就是=右边的值,那么右值有什么特点呢,就是没有引用或者指针指向,就是单纯的数据,赋值的时候一定是深拷贝。

上面的规则是针对c++98的,c++11后上面的规则在有些情况下会有效率问题,简单说就是有些时候右值也没有深拷贝的必要。于是给了一右值引用的符号“&&”,这样右值也有引用了,你就可以选择行的不执行深拷贝了。

如下我举了几种创建右值引用的方式。

  • 1.用左值变,move就是c++11新添加的这么一个函数
  • 2.字面值常量
  • 3.函数返回值。

2.代码

#include <iostream>

using namespace std;
int fun() {
    return 50;
}
int main()
{
    //左值引用
    int a = 10;
    int& pa = a;
    cout << "addr:" << &pa << " value:" << pa<<endl;

    //右值引用  把一个左值变成右值
    //int&& pb = a;//把一个左值复制给右值引用 失败
    int&& pb = move(a);
    cout << "addr:" << &pb << " value:" << pb << endl;

    //通常 字面值常量是没有引用的,应是右值,但是在c++11后可以
    int&& pc = 100;
    cout << "addr:" << &pc << " value:" << pc << endl;

    //左、右值引用对比 用函数返回值的方式创建一个右值引用
    //int& pd = fun();
    int&& pd = fun();
    cout << "addr:" << &pd << " value:" << pd << endl;
    
    cout << "Hello World!\n";
}

3.运行

addr:00000026258FFA54 value:10
addr:00000026258FFA54 value:10
addr:00000026258FFAD4 value:100
addr:00000026258FFB14 value:50
Hello World!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值