unsigned默认是有符号的,char类型比较特殊,有无符号取决于编译器,因此使用char最好明确指定unsignedunsigned和带符号类型在表达式里混用很危险,因为带符号类型会被转换为unsigned,要是负数值就不是想要的值了int,八进制和十六进制则不一定doublebool字面值包括true和falsenullptr‘\0‘的字符数组)\后面三个字符加入转义,而使用16进制则将后面所有字符加入转义,所以可能会出错extern可以不用初始化变量只声明他,但是要是给初值那extern就没用了,而且要是在函数内给初值还会报错extern和#include的区别在于#include把人家整个头文件都包含进来了,而extern针对需要的变量,并且是从源文件中调用::变量名来直接调用全局变量NULL虽然可以定义空指针,但是不建议在C++里这么做void*指针可以存任何类型的地址,虽然可以比较、作参数、作返回值,但是不能使用其所指的对象,因为不知道类型也就不知道有什么操作const的,必须初始化,因为编译器要替换,必须知道他的值constconst的限制,因为不算作改变const变量,毕竟还没有值呢const是独立的,如果想让各文件共用该变量,必须在声明和定义前上extern,而变量只需要声明extern即可constexprconst(必须是)表达式也是常量表达式const,还要看用来初始化的值是不是常量表达式,缺一不可constexpr,那么他一定是常量表达式,就不用操心const变量的初始值是不是常量来判断是不是常量表达式了constexpr的,因为编译器不知道是什么值constexpr一个指针的时候指的就是指针,而不是指向const的变量,相当于定义了顶层constauto与decltypeconst,修饰的是这个类型,而不是像普通情况下是指向const类型的值auto一个引用时,推出的类型是他引用的类型auto会扒下顶层const,即auto一个顶层const,会推出非const的类型,要是就想让其推出const,则在auto前面加constauto同时声明多个变量的时候,必须保证变量的基本类型是一样的(const int和int是两个基本类型)const都是底层的,但是当用auto推断一个顶层常量时,得到的const是顶层的decltype是auto的另一种形式,不过他接受表达式或者函数的时候不去计算decltype接收的是什么类型就会返回什么类型,尽管引用在其他任何地方都是所绑对象的代名词,但在decltype这里还是会被老老实实的返回引用类型decltype接收解引用的时候,返回的是引用,这并不违背上一条,因为解引用,解出来是个引用decltype如果接收了带括号的变量,会将他看成一个特殊的表达式(特殊在可以作为左值),此时会返回引用类型#define、#ifdef、#ifndef、#endif防止了头文件被多次包含还能正常运行,原文:https://www.cnblogs.com/NoteofZy/p/14829044.html