C++:左值(引用)&右值(引用) 〇、前言本文会讨论C++中的左值,右值,左值引用,右值引用,以及会理清它们之间的关系。 一、左值与右值(一)概述 1. 左值是一般指表达式结束后依然存在的持久化对象。右值指表达式结束时就不再存在的临时对象。便捷的判断方法:能对表达式取地址、有名字的对象为左值。反之,不能取地址、匿名的对象为右值。 2. C++ 表达式(运算符带上其操作数、字面量、变量名等)有两种独立的属性:类型和值类别 2024-05-10 C++ #c++
C++并发:线程函数传参(二) 正文传参中的陷阱 1. 向std::thread 构造函数传参:所有参数(含第1个参数可调用对象)均按值并以副本的形式保存在 std::thread 对象中的tuple里。这一点的实现类似于std::bind。如果要达到按引用传参的效果,可使用std::ref来传递。 2. 向线程函数的传参:由于std::thread 对象里保存的是参数的副本,为了效率同时兼顾一些只移动类型的对象,所有 2024-05-10 C++ #c++ #多线程
C++并发:线程函数传参(一) 一、问题当创建 std::thread 对象时,传递给线程的函数的所有参数都会被复制或移动到新创建的线程的内存空间中。这是为了确保线程的执行不会依赖于父线程可能销毁的栈上变量,从这个机制上看,这是很合理的。 在新的线程的栈上,这些变量都会以右值的方式传递给线程函数,这主要是为了提高传参的性能。但是在某些情况下,这些右值并不能满足线程函数的参数。如果线程函数需要引用参数,直接传递普通变量会因为无 2024-05-09 C++ #c++ #多线程
macOS DOSBox 汇编环境搭建 正文一、安装DOSBox首先前往DOSBox的官网下载并安装最新版本的DOSBox。 二、下载必备的工具包在用户目录下新建一个文件夹,比如 dosbox: 1mkdir dosbox 然后下载一些常用的工具。下载好了后,将这些工具解压,重新放在 dosbox 这个文件夹中: 三、配置自动挂载由于DOSBox启动之后所有的设置都会复原,因此要实现自动挂载需要配置自动运行命令。 打开Termin 2024-05-05 经验方法 > 8086 #汇编 #8086 #macos #DOSBox
CM3:lldb 调试 qemu 跑的程序 正文环境:macOS M1。QEMU可以通过启动一个GDB调试端口来允许使用GDB调试正在运行的虚拟机,我们要做的就是通过 gdb 或者 lldb 连接到这个端口,然后进行调试。我们先写一个简单的CM3 程序: 123456789101112131415161718192021 .equ STACK_TOP, 0x20000800 .text .global _start 2024-04-28 CM3 #汇编 #QEMU #CM3
CM3:qemu执行汇编 正文环境:macOS M1。前文讨论了 qemu 模拟8086 的平台运行8086 汇编代码,本文将讨论 qemu 模拟arm 平台运行 CM3 代码。代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162.sy 2024-04-27 CM3 #汇编 #QEMU #CM3
8086:qemu执行汇编 正文环境:macOS M1。 QEMU(Quick EMUlator)是一个开源的虚拟机监视器,可以模拟多种硬件平台,包括处理器架构、设备和操作系统。QEMU具有以下主要功能和用途: 硬件模拟器:QEMU可以模拟多种处理器架构,如x86、ARM、MIPS等,以及各种设备,如网络适配器、显卡、存储设备等。这使得开发人员可以在虚拟环境中测试和调试他们的软件,而无需实际硬件设备。 虚拟机管理:Q 2024-04-26 8086 #汇编 #QEMU #8086
C++:函数符(一) 正文函数对象也叫函数符,函数符是可以以函数方式与()结合使用的任意对象。这包括函数名、指向函数的指针和重载了()运算符的类对象。 上面这句话的意思是指:函数名、指向函数的指针和重载了括号运算符的类对象与括号结合,从而以函数方式实现某种功能。对于 for_each(),第三个参数我们一般可以写一个函数名,或者类的对象(该类必须对括号运算符进行了重载),但是不可以为一个函数指针,因为函数指针的类型 2024-04-24 C++ #c++
C++:适配器 正文当两个类的接口不兼容时,可以使用适配器模式将一个类的接口适配成另一个类的接口,使它们可以协同工作。下面是一个简单的示例,展示如何使用适配器模式将一个旧的类的接口适配成一个新的类的接口: 假设有一个旧的类 OldClass,它有一个名为 oldMethod 的方法,但我们希望将其适配成一个新的类 NewClass,并且新类中有一个名为 newMethod 的方法。我们可以使用适配器模式来实现 2024-04-24 C++ #c++ #开发语言
C++:迭代器 〇、前言在C++中,STL(标准模板库)提供了一组强大的数据结构和算法,其中使用了迭代器来实现数据访问和操作的通用接口。 迭代器是一种行为类似指针的对象,它允许对容器中的元素进行迭代(遍历)。STL定义了几种迭代器类型,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。这些迭代器类型具有不同的功能和约束条件,使得它们适用于不同类型的数据结构和操作。 关于概念,它在C++中是一 2024-04-23 C++ #c++ #开发语言