一、前言
最近在看风络,开发会变得更高效,更高质”。
所以正好借助第5版来重新学习巩固C++的知识。《C++的那些事》这个系列,将会以知识碎片的形式记录我在学习过程中一些知识重点。
二、关于C++的学习
个人身为C++菜鸟,自然是没有任何经验之谈,这里摘录C++Primer5ED前言里一些个人以为很有道理的观点。
1,学习语言的一个境界是把自己想象成编译器。
2,使用C++语言的“两面性”观点。C++正在走向完美,所以,C++语言值得学习(甚至研究)。这些知识可以成为一切编程的基础。然而在实践中,不必全面地使用C++语言的各种特性,而应根据工程项目实际情况,适当取舍(譬如动态类型信息、虚拟继承、异常等特性的使用)。通常只鼓励使用C++语言的一个子集。
关于第2点,个人是相当的认同,C++的一些高级特性,确实只有在一些库例程中才有体现,一般工程开发中很少能用得上。所以在学习C++的时候,开始不必对一些语法细节或高级技法过于追求完美,可以先知其大概,在以后工作学习中再逐渐加深认识。
三、数据与类型
1,任何一门编程语言都是由一些基本组件来构成,C++也是一样。
- 整型、字符型等内置类型
- 变量,用来为对象命名
- 表达式和语句,用于操纵上述数据类型的具体值
- if或while等控制结构,这些结构允许我们有选择地执行一些语句或者重复地执行一些语句
- 函数,用于定义可供随时调用的计算单元
- 自定义数据类型:比如:类
- 标准库
C++的另外一点就是编程思想,通过类引入了面向对象编程的思想,再通过模板等技术引入了通用或泛型编程的思想。
这本篇文章中,主要是关于前2点的内容:对象和对象的类型。
2,类型是设计中最基本的概念,一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。内置的数据类型如此,用户自定义的类型也是如此,C++的一个很重要的任务就是让用户设计的类型像语言内置类型一样好用。
3,程序所处理的数据都保存在变量中,而每个变量都有自己的类型。
4,执行算术运算时,数据类型的选择
- short 一般很少使用,容易产生越界。
- char类型在一些实现中有时作为signed处理,而有时作为unsigned处理,所以只用char来表示字符是明智之举。
- 在大多数的时候使用int就没有问题,在很多机器上int用4个字节存储,足够满足大部分计算的要求。
- 浮点型的选择就很简单了,使用double类型基本不会有什么错误,而且有可能会比float计算代价低。
5,在使用无符号数作为循环的索引时,注意unsinged int 与 int类型间的隐式数据转换,如下面的程序,可能实际并不是你想要的结果。
1 // error 变量u永远也不会小于0,循环条件一直成立 2 for (unsigned u = 10; u > = 0; -- - u) 3 { 4 std::cout << u << std::endl; 5 }
6,C++11定义了一种新的指针字面值nullptr,用于取代C语言中预编译常量NULL
7,注意C++中初始化与赋值的区别,这一点在类的定义中更为明显。初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
8,引用和指针都是C++定义的复合类型,引用与指针的定义是由一个基本数据类型和紧随其后的一个声明符列表组成。
1)引用是给变量另起了一个名字,当定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始化拷贝给引用。一旦初始化完成,程序把引用和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
实际上引用的本质是指针,而且是一个常量指针,占用4个字节的空间。
2)与引用不同的是,指针本身是一个对象,允许指针拷贝和赋值,而且在指针的生命周期内,它可以先后指向几个不同的对象。
9,常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。