零碎知识点
- fflush仅仅是为了输出而设计的, 标准中并没有说明它对输入缓冲的效果.
- 一元运算符和
=
是右结合的,这和<<
是完全不同的,a=b=c
意味着a=(b=c)
,b=c
将先执行 - C++11后引入了
thread_local
型的生命周期,这种对象和线程的生命周期是一致的 C++11
中很多类型都支持列表初始化
=
是右结合的,这和<<
是完全不同的,a=b=c
意味着a=(b=c)
,b=c
将先执行thread_local
型的生命周期,这种对象和线程的生命周期是一致的C++11
中很多类型都支持列表初始化
模板作为一个C++中的一个高级特性,广泛应用于各种场合,以尽可能弥补自身作为编译语言的动态能力.然而,除非必要,模板应当尽可能的简单,避免本末倒置.
T::foo
型语法分析可能会有歧义,例如,T::vl * p
这样的语句可能是使用T
的静态成员做乘法,也可能是创建一个T::vl *
型的指针.
{}
进行逐成员初始化public
或private
声明,则编译器可能重排该类的内存布局(移动部分对象),这将导致成员排布和程序员的预期产生差异.public继承
throw-try-catch
是异常系统的典型三个环节.
exception
为基类的约10种异常,我们可以使用这个类,也可以自定义类,该类的const char * what()
成员用于给用户提供信息.
&&
与||
不会进行短路求值.T
或T&
,而不要是指针.a<b
为假,new delete
是C++中的两个主要的表达式.
new
相当于C的malloc() + T()
,delete
相当于C
的free() + ~T()
.构造和析构总是会被调用.operator
尽管在大部分场合中,数组类型和函数类型都被转换成某种指针使用,然而它们确实是某种类型.
这一点在类型推导中很重要,因为类型推导可以推导出数组类型/函数类型
T[N]
型对象为数组类型,其中N必须为constexpr
,称T array[N]
中的array
为T[N]
型的一个实例.
N
是数组的一个属性,当N
不同时,是不同类型的数组.xxx_cast<TYPE>(var)
,每个都有特定的应用场合.TYPE tmp(var)
. 转换语句整体为tmp
xxx_cast<TYPE &>(var)
得到的临时量可以作为左值,其他情况都是右值。const_cast
const_cast
是只用于处理const
const
限定符const
是一种编译期特性,用于限定对象的编译期写入权限
trick
在运行期写入对象.const
就能利用编译器约束开发人员的行为,给开发人员做一定提醒.const
值往往还可以供编译器进行优化.const
型.最常用的场合是函数形参/返回值中的const T