C++系列

C++系列

[Cpp基础] [02] 拷贝/移动与引用

这一部分主要介绍左值,右值,引用,拷贝和移动.这些可以说是C++11显著区别于以前的C++(还有C)的特性.本文主要从易用的角度介绍值类型(值类型实际要更多一些). 拷贝与移动的基本定义 * "拷贝"和"移动"是从逻辑层面定义的,在最终的指令层面,只有"拷贝",没有"移动"操作. * 对于自定义类,拷贝与移动的实现有基本的准则(非硬性),这些准则是: * 拷贝:不应对源对象做任何修改. * 移动:可以对源对象做修改,但是源对象被修改后必须可以被赋值,且可以安全的析构. * 注意,对于移动操作.我们不能对移出后剩余的部分做任何假定,在没有重新赋值前,不应该使用移出后剩下的对象 * 例如:对一个vector<int> a;

By Edimetia3D

C++系列

[Cpp基础] [01] Cpp编译系统基础

编译系统基础 工具链 * 一个典型的工具链是:链接器-编译器(汇编器一般不接触)-预处理器-文本编辑器-构建系统 * 调试工具及profile工具通常作为独立的部分出现. * 构建系统,或者称为工程管理器,对于开发意义重大,是工具链中重要的一环,其意义在于组织文件,管理源代码,明确目标输出,组织编译/链接的顺序和关系. * 常见的构建系统有,VS的nmake,QT的qmake,跨平台的CMAKE(使用makelist.txt),unix平台的make(使用makefile).其中CMAKE是目前事实上的标准构建系统,bazel也随着google项目的扩张越来越流行 * VS和QT这样的IDE对自己的构建系统更加友好,往往可以按GUI的形式设置构建参数,CMAKE等则都需要开发者手动写构建文件. * 使用#ifndef 或者#pragma once可以有效的避免重复include,一个正常的头文件都应该包含include guard.

By Edimetia3D