Songqian Li's Blog

去历史上留点故事

格式化输出的执行顺序

由于 C 语言参数压栈顺序是从右往左,所以 printf 和 cout 函数在执行时是从右往左读入缓冲区,然后从左往右输出。

右值引用和左值引用

C++一共有三种基本值类型: 左值(lvalue), 纯右值(prvalue), 亡值(xvalue);
另外还有两种混合值类型: 泛左值(glvalue),右值(rvalue);
左值(lvalue)简单理解就是可以出现在=的左边,所以是可以被赋值的值;右值(rvalue)类似理解是只可以出现在=的右边,所以是不可以被赋值的值;左值(lvalue) = {泛左值(glvalue)} - {亡值(xvalue)};
右值(rvalue) = {亡值(xvalue)} ∪ {纯右值(prvalue)};
std::move 的作用是返回一个亡值(xvalue);

右值引用是 C++11 中引入的新特性 , 它实现了转移语义和精确传递。它的主要目的有两个方面:

  1. 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。

  2. 能够更简洁明确地定义泛型函数。

左值和右值的概念:
左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。

右值引用和左值引用的区别:

  1. 左值可以寻址,而右值不可以。

  2. 左值可以被赋值,右值不可以被赋值,可以用来给左值赋值。

  3. 左值可变,右值不可变(仅对基础类型适用,用户自定义类型右值引用可以通过成员函数改变)。左值引用与右值引用
    [c++11]我理解的右值引用、移动语义和完美转发

相关文章
评论
分享
  • 右值引用

    本文整理自《modeln C++ Tutorial:C++11/14/17/20》 右值引用是 C11 引入的与 Lambda 表达式齐名的重要特性之一。它的引入解决了 C 中大 量的历史遗留问题,消除了诸如 std::vecto...

    右值引用
  • 为什么Proactor比Reactor模式更优?

    首先,我们先了解一下什么是 Reactor 模式和 Proactor 模式。 什么是 Reactor 模式和 Proactor 模式? Reactor 模式 Reactor 模式是指主线程负责监听和分发事件,工作线程负责 I/O 以及...

    为什么Proactor比Reactor模式更优?
  • 循序渐进实现C++的单例模式

    注:本文引自:https://guodong.plus/2020/0529-002048/ v1.0——基本实现 12345678910111213class Singleton { public: static Si...

    循序渐进实现C++的单例模式
  • 泊松过程推导

    本文将通过计数过程推导 t 时刻事件发生 k 次的概率公式。 I. 计数过程 有这样一段连续时间,事件每经过时间间隔发生一次,这里用代表从到时间内事件发生的次数,那么在简单模型下,事件的发生次数。 众所周知,在实际生活中事件发生的间隔...

    泊松过程推导
  • 《操作系统真象还原》:第十章 输入输出系统

    上一章中我们遇到的字符混乱和 GP 异常问题,根本原因是由于临界区代码的资源竞争,这需要一些互斥的方法来保证操作的原子性。 10.1 同步机制——锁 10.1.1 排查 GP 异常,理解原子操作 多线程执行刷屏时光标值越界导致 G...

    《操作系统真象还原》:第十章 输入输出系统
  • 《操作系统真象还原》:第九章 线程

    线程和进程将分两部分实现,本章先讲解线程。 9.1 实现内核线程 9.1.1 执行流 在处理器数量不变的情况下,多任务操作系统采用多道程序设计的方式,使处理器在所有任务之间来回切换,这称为“伪并行”,由操作系统中的任务调度器决定当前处...

    《操作系统真象还原》:第九章 线程
  • GPU虚拟化

    用户层虚拟化 本地 API 拦截和 API formwarding 在用户态实现一个函数库,假设叫 libwrapper, 它要实现底层库的所有 API; 让 APP 调用这个 libwrapper。如何做? libw...

    GPU虚拟化
  • 硬件虚拟化

    硬件虚拟化介绍 硬件虚拟化要做的事情 体系结构支持 体系结构 实现功能 作用 模式切换 Host CPU <-> Guest CPU 切换 CPU 资源隔离 二阶段地址转换 GVA-> GPA ...

    硬件虚拟化
  • 《操作系统真象还原》:第八章 内存管理系统

    8.1 makefile 简介 这部分可参考阮一峰的讲解:https://www.ruanyifeng.com/blog/2015/02/make.html 8.1.1 makefile 是什么 makefile 是 Linux ...

    《操作系统真象还原》:第八章 内存管理系统
  • 《操作系统真象还原》:第七章 中断

    7.1 中断是什么,为什么要有中断 运用中断能够显著提升并发,从而大幅提升效率。 7.2 操作系统是中断驱动的 略 7.3 中断分类 把中断按事件来源分类,来自 CPU 外部的中断就称为外部中断,来自 CPU 内部的中断称为内部中断。...

    《操作系统真象还原》:第七章 中断