C++学习笔记(一)
2015-07-30 15:35
288 查看
1. 整型溢出问题
对于unsigned类型,编译器必须调整越界值使其满足要求。“溢出后的数会以2^(8*sizeof(type)) 作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。2. C++的左值和右值
左值可以出现在赋值语句的左边或者右边;右值只能出现在复制的右边。3. 几个不常用的C++关键词
explicit:放在单参数构造函数前面,禁止单参数构造函数的隐式类型转换。C++提供了四个转换运算符:
const_cast <new_type> (expression):移除变量的const或volatile限定符。
const_cast的目的在于某些变量原本不是const的,但由于某种特殊原因,无意间被变成了const的,例如使用了一个const引用指向了一个本来不是const的对象。结果写了一些代码之后发现它实际上需要被修改。这在平时的工作中不会遇到因为你可以直接把const引用修改成非const的,但C++中可能的情况太多,尤其考虑到很多复用的时候,有时还是会出现本不该是const的对象被const引用了这种情况。尤其是使用模板,比较复杂的情况。常用于函数形参是非const,而实参是const,可以用这个转换,但内部还是不能修改。
static_cast <new_type> (expression):支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持
dynamic_cast <new_type> (expression):支持子类指针到父类指针的转换,并根据实际情况调整指针的值,和static_cast不同,反过来它就不支持了
reinterpret_cast <new_type> (expression):type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。用在任意指针(或引用)类型之间的转换;以及指针与足够大的整数类型之间的转换;从整数类型(包括枚举类型)到指针类型,无视大小。常用:
从指针类型到一个足够大的整数类型;
从整数类型或者枚举类型到指针类型;
从一个指向函数的指针到另一个不同类型的指向函数的指针;
从一个指向对象的指针到另一个不同类型的指向对象的指针;
从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针;
从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针。
volatile:volatile是一个类型修饰符(type specifier)。确保本条指令不会因编译器的优化而省略,且要求每次直接读值。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
4. 内置变量的初始化问题
内置类型变量是否自动初始化取决于变量的定义位置。函数体外定义的变量都初始化为0,函数体内定义的内置类型变量不进行自动初始化。5. 声明和定义
定义:为变量分配存储空间。声明:用于向程序表明变量的类型和名字,定义也是声明。可以用extern关键字声明变量名而不定义它。
6. 引用
对象的另一个名字。复合类型:是指用其他类型定义的类型。//code int iVal=1024; int &iVal1=iVal;
const 引用:指向const对象的引用。
7. 枚举
枚举定义了整数常量集,而且还把它们聚集成组。//code enum openModes {input, output, append};
默认的,第一个枚举成员赋值为0,后面的依次比前面的大1。可以指定对应的整数值,并且可以不唯一。
每个enum都定义了一种新的类型,可以相互赋值,但不能夸类型赋值。
8. 头文件
头文件不应该含有定义。三个例外:头文件可以定义类,值在编译时就已知道的const对象,inline函数。
一般只有在用常量表达式初始化const变量时定义在头文件中,否则一般定义在源文件中,声明在头文件中。
处理头文件多次包含问题:
//code #ifndef _****_H #define _****_H //define #endif
9. 类初始化列表
(1) 采用初始化列表代替赋值操作能够节省时间;(2) const数据成员只能够用初始化列表的方式赋值;
(3) 某些不具备零参数构造函数的数据类型必须用初始化列表的方式赋初值。
10. 命名空间
using namespace:: name; using std::cin; using std::out;
相关文章推荐
- 读书笔记MoreEffectiveC++(31)
- C语言程序的构成
- 关于C语言中的运算符
- C++OJ提交题目中的语言选项里G++与C++的区别
- c++ 工具库 (zz)
- 约瑟夫环(C++单项循环链表)
- 计数问题(/C++)
- 【C语言探索之旅】 第二部分第十课:练习题和习作
- 深入剖析Android中init进程实现的C语言源码
- 链表 C++描述
- 24点问题(穷举法/C++)
- [c++]C++文件读写详解(ofstream,ifstream,fstream)
- 产生数问题(map+queue/C++)
- [LeetCode] Remove Duplicates from Sorted Array II
- BOOL和bool区别
- 学c语言难吗?
- C++ 图片类型(所有类型)最简单的复制黏贴实现
- C++ fstream文件流读写文件操作
- C语言——缓冲区
- C++矩阵运算库--Eigen