https://www.gravatar.com/avatar/932f1b40c8d0202ce03a0df412bfb0ff?s=240&d=mp

chaomai's Odyssey

C++中typedef的使用和类型安全

关于typedef

传统的typedef机制允许对已存在的type提供synonym或者alias,我们把这种的传统的typedef(包括c++11中的alias声明)描述为“透明类型机制”:这种声明引入了新的类型名称,但不是新的类型。被定义为新引入的alias的类型与被定义为原来类型的变量,完全一样,不会有一丁点行为上的差别。

入手KBC Poker 2

KBC Poker 2

用倦Thindpad T420自带的键盘,也想尝试一下机械键盘的手感如何,就入手了一个机械键盘,KBC Poker 2。

入手Poker 2的原因不仅仅是Filco Minila Air和HHKB的价格有点高,还有一点吸引我的原因就是Poker 2支持全键位硬件可编程。

C++面向对象程序设计

基类中类型相关的函数与派生类不做改变直接继承的函数是不同的,当希望派生类定义合适自身的版本,此时基类就将这些函数声明为虚函数。

基类

基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作。

C++重载运算与类型转换

运算符重载

重载的运算符是具有特殊名字的函数,除函数调用运算符外,其他重载运算符不能含有默认实参

  • 一个运算符函数,或者类的成员,或者至少含有一个类类型的参数。也就是说不能为内置类型重载运算符。
  • 只能重载已有的运算符。
  • 一个重载的运算符,其优先级和结合律与对应的内置运算符保持一致
  • 由于使用重载的运算符本质上是函数调用,因此对象求值顺序的规则无法应用到重载的运算符上。尤其是&&||,,两个运算对象总是会被求值。
  • 通常情况下,不应该重载&&||&,,运算符。
  • 一般来说,提供了某个重载运算符,也应该提供与此运算符相关的一系列运算符,如:算术运算符->对应的复合赋值运算符。

成员或者非成员

  • =[]()->运算符**必须是成员。

C++拷贝控制

拷贝、赋值和销毁

拷贝构造函数

拷贝构造函数的第一个参数必须是一个引用类型,且几乎总是一个const引用。由于拷贝构造函数在多个情况下会被隐式使用,因此不能是explict的。

C++动态内存

静态内存:存储局部static对象、类static数据成员和定义在函数之外的变量。 static对象:使用之前分配,程序结束时销毁。

栈内存:保存定义在函数内部的非static对象。 栈对象:仅在定义的程序块运行时才存在。