c++面向对象程序设计(c++用什么软件编程)

技术C++右值如何引用本篇内容介绍了“C++右值如何引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.左值和右值在我

本文介绍了“如何引用正确的C值”的相关知识。很多人在实际案例的操作中会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

1.左值和右值

在我们之前的文章中,我们介绍了所有左值引用。C 11在左值引用的基础上引入了右值引用。因为是新功能,使用频率不是很高,所以有一定的学习成本。

先抛开引用的概念,先看看什么是左值右值。其实很简单。左边的值可以取地址,地址位于等号的左边。右边的值不能得到地址,地址位于等号的右边。

inta=4;例如,我们定义一个int类型的变量A,并使其值等于4。其中A在等号的左边,我们可以找到A的地址,而4在等号的右边,我们没有办法寻址4。所以a是左值,4是右值。

再比如:

int test(){ 0

返回4;

}

inta=test();同样,A在等号的左边,所以有一种方法可以得到地址作为左值。而test()是临时值,没有办法得到地址。这是一个正确的价值观。

所以这里很清楚,有地址的变量是左值,而常数值和没有地址的临时变量是右值。

00-1010了解左值和右值的概念,再看左值引用和右值引用。顾名思义,左值引用是一个可以指向左值但不能指向右值的引用。

inta=4;

int b=a;//法律

intc=4;//非法的但是左值引用也有例外,就是使用const修饰的左值引用是可以指向右值的:

constitint b=4;因为const修饰的引用不能再更改了,所以可以引用正确的值。如果您阅读STL代码,您会发现一些函数的参数是常量,以便与参数是常量的情况兼容。例如,矢量中的push_back:

void push _ back(const value _ type val);右值引用的概念类似于左值引用,即可以指向右值但不能指向左值的引用。为了将其与左值引用区分开来,使用了两个字符。老实说,这个符号令人费解,因为它与和的意思相同。

inta=4;

int b=4;//法律

intc=a;//非法上面第三行代码非法的原因是C是右值引用,不能指向左值。如果我们必须指出呢?没有出路。您可以使用std:move函数,该函数可以将左值转换为右值。

使用命名空间TD;

inta=4;

intc=move(a);move函数听起来像移动,但实际上它并不移动变量,而是执行类似于类型转换的操作。

我不知道你看到这里是不是觉得自己很大,但这还没有结束,这很重要。也就是说,左值引用和右值引用本身都是左值引用:

void test(int tmp){ 0

tmp=2333

}

使用命名空间TD;

inta=4;

int b=a;

intc=4;

测试(a);//非法

测试(b);//非法

测试(c);//非法

测试(移动(a));//法律

测试(移动(b));//法律

测试(移动(c));//法律C中的引用是一个非常大的范畴,除了左值引用和右值引用之外,还有很多细节。例如通用引用、引用折叠、完美转发等.

这里介绍一下“如何引用C的正确值”的内容。感谢阅读。如果你想了解更多的行业,可以关注网站。边肖将为您输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148699.html

(0)

相关推荐

  • 微信朋友圈只发文字,朋友圈为什么不能直接发文字

    技术微信朋友圈只发文字,朋友圈为什么不能直接发文字微信朋友圈是可以直接发文字的,步骤如下微信朋友圈只发文字:
    1.登陆微信。
    2.在微信界面当中点击发现选项。
    3.然后在发现界面打开朋友圈。
    4.在朋友圈界面上长按相机图

    生活 2021年10月23日
  • Sentinel-Go 源码系列,二)|初始化流程和责任链设计模式

    技术Sentinel-Go 源码系列,二)|初始化流程和责任链设计模式 Sentinel-Go 源码系列(二)|初始化流程和责任链设计模式上节中我们知道了 Sentinel-Go 大概能做什么事情,最简

    礼包 2021年11月9日
  • 手打虾滑,现在比较有特色的火锅有哪些

    技术手打虾滑,现在比较有特色的火锅有哪些如今的火锅店是越来越多,品种也越来越多了,想吃火锅了,再也不单单是在铜锅涮肉和川味火锅中选择了,日本的寿喜锅,韩国的部队火锅,潮汕牛肉火锅,港式小火锅,梭边鱼火锅,贵州的酸汤鱼火锅

    生活 2021年10月30日
  • linux进程调度采用的是什么(linux进程调度详解)

    技术linux进程调度源码是什么这篇文章主要讲解了“linux进程调度源码是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux进程调度源码是什么”吧!下面是进程

    攻略 2021年12月17日
  • Spring Data Redis应用场景分析

    技术Spring Data Redis应用场景分析 Spring Data Redis应用场景分析在Spring Boot中,默认集成的redis是Spring Data Redis。Spring Da

    礼包 2021年12月5日
  • MySQL如何优化WHERE子句

    技术MySQL如何优化WHERE子句这篇文章主要为大家展示了“MySQL如何优化WHERE子句”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何优化WHERE子句”

    攻略 2021年11月1日