【C++】移动语义

最近好好研究了一下 C++ 中的移动语义。

左值 & 右值

已经在内存中分配了地址的、可以取到地址的,是左值。
在内存中未分配地址的、仅存在于寄存器中无法取到地址的,是右值。

int a = 8; // a 已分配内存,是左值。
a + 1; // a + 1 仅存在于寄存器中,是右值。

右值引用

T&& 是右值引用,只接受右值

int&& a = 8; // 正确,8 仅存在于寄存器中。

int v = 9;
int&& b = v; // 错误,v 是左值,无法存入右值引用。
int&& c = v + 3; // 正确,v + 3 的结果仅存在于寄存器中,是右值,可以存入右值引用。

【C++】多线程与并发 1 - 概念入门

原文链接
原作者:Valentina Di Vincenzo
仅供个人学习、研究和欣赏

当我刚开始学 C++ 多线程的时候,我凌乱了。程序的复杂度如同一朵美丽的鲜花一样炸开了,并发的不确定行为要把我骨灰都给扬咯,当时我直接蒙了。如今你被我逮到了,我给你整个好活儿:这里是一份关于 C++ 并发和多线程的简易教程,放心,这个不会三天之内sa了你

现在,来快速复习一些基本概念,然后来雅间尝点并发代码。

概念

1. 什么是线程?

在进程被创建时,每个进程都有一个单独用来执行代码的线程,叫主线程。你可以向操作系统请求创建其他的线程,这些线程共享父进程的内存空间(代码区,数据区,其他操作系统资源,比如说打开的文件和信号)。另一方面,每个线程有各自的线程ID,栈,寄存器组和程序计数器。基本上来说,线程就是轻量的进程。在线程之间切换比进程快,线程间通信也比进程间通信更容易。