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