请关注编程技术,而非语言特性
- 通过初始化列表赋值:
complex<double> z {1, 2};
complex<double> z = {1, 2};
int k {5};
int k {5.2};//报错,试图执行浮点数向整型的转化
- =和auto配合避免书写长类型名:
auto one = 3;
auto two = true;
auto three = 'x';
auto four = 4.1;
- 常量:const和constexpr:
constexpr大致意思是“在编译时求职”,主要用于说明常量,作用是允许将数据置于只读内存中以提升性能。 - c++中的范围for语句:
int main(){
int a[] {1, 2, 3, 4, 5};
for (auto i : a)
cout << i << " ";
system("pause");
}
- new 运算符可以生成一个指针,它从一块名为自由存储(动态存储、堆)的区域中分配内存。
结构和类的区别:结构可以非常自由地使用其内部的数据部分。 - 模块化与分离编译:一般把描述模块接口的生命放置在一个特性的文件中(.h),它的实现放在另一个文件中(.cpp),则需要使用该模块的文件只需要包含其头文件(模块描述文件:.h)即可,这里模块儿化是通过语言特性实现的。
- 名字空间:一方面表达某些申明属于一个整体,另一方面表明它们的名字不会和其他命名空间的冲突。
- 类,结构,枚举,名字空间是三个不同程度的模块化
- 模块化和抽象的一个重要影响就是运行时错误的捕获位置和处理位置被分离开来。
- 不变式:这个概念是就类而言的,这是一个假定某事件为真的申明,这是类能够正常工作的前置条件,需要在构造函数中建立。这个概念是c++中由构造函数和析构函数支撑的资源管理概念的基础。
- 静态断言(static_assert):不变式有助于在类构造过程中有不满足前置条件的参数时产生并抛出异常,这属于运行时异常,而静态断言则是在程序编译过程中用来检查代码的机制(速度属性不能大于某值)
- 定义在类内部的函数默认是内联的