C++需要注意点

来源:互联网 发布:js excel.application 编辑:程序博客网 时间:2024/05/16 18:43

11、设定static成员变量初值时,不受任何存取权限的束缚。可以再还没有诞生任何对象的时候就处理static类型成员变量,但首先必须初始化它。

2、只要access level允许,任何函数都可以存取static成员变量。但如果你希望在产生任何object之前就存取其class的private static成员变量,则必须设计一个static成员函数。

3、四种不同的对象生存方式(in stack,in heap,global,local static)。

4、程序中不能定义void类型的变量,它仅仅是用于说明没有返回值或者说明指针是无类型的。

5、变量的几种存储类型:

在C++中,变量的存储类型有自动类型、寄存器类型、静态类型、外部类型等四种类型。

(1)、自动类型变量auto:自动类型只能是局部类型变量,属于动态存储类型。

(2)、静态类型变量static:即在程序运行的过程中静态变量始终是占用一个存储空间,静态变量只能再他的作用范围内使用,使用局部静态变量始终是占用一个存储空间。静态变量只能在他的作用范围内使用,使用局部静态变量是为了在下次调用该函数时,能使用上次调用后得到的该变量的值。

(3)、寄存器变量register:属于动态存储类型,编译器不为寄存器类型的变量分配内存空间,而是直接使用CPU的寄存器。以便提高对这类变量的存取速度。主要用于控制循环次数等不需要长期保存值得变量。

(4)、外部类型变量extern:外部类型变量必须是全局变量,在C++中,有两种情况需要使用外部类型变量。一种是在同一源程序中,当在全局的定义前使用该变量时,在使用前要对该变量进行外部类型变量声明。另一种是当程序有多个文件组成时,若一个源文件中要引用在另一个源文件中定义的全局变量,则在引用前必须对所引用的变量进行外部声明。如果在某文件中定义的全局变量不想被其他文件使用,则必须将该变量声明为静态全局变量,也就是说,静态全局变量只能供所在的文件中使用。

6、如何在switch语句内部定义变量:在switch结构中可以再最后一个case标号或default标号后面定义变量,或者引入块语句来定义变量。

7、纯虚函数用来定义没有意义的实现,用于抽象类中西药交给派生类具体实现的方法。

8、何时使用this指针:当对一个对象调用成员函数时,编译器程序先将对象的低着赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显示地使用this指针类引用数据成员。同样也可以使用*this来标识该成员函数的对象。

9、可以使用派生类的引用或对象初始化基类的引用。严格说来,对对象没有类似转换。编译器在运行时不会自动将派生类型对象转换为基类。

10、C++支持参数个数不确定的,当不知道有多少个参数或类型,只知道其中一个或几个,那么可以用隐藏参数...代替,不知道的就用...代替,调用时只需要处理所知道的参数,C++是通过隐藏参数机制来支持参数个数不确定的函数。

11、类的静态成员函数可以访问类的私有成员,但是静态成员函数不能直接访问类的静态私有成员,因为静态成员函数是不可以直接访问类的非静态成员的,但是静态成员函数可以借助对象名和指针来访问类的非静态私有成员。静态函数是不可以直接访问类的私有成员变量的,但是可以通过宏定义private和public等方法来实现对类的私有成员的访问。 

12、任何一个逻辑运算符的优先级低于一个关系运算符。移位运算符的优先级比算术运算符要低,但是比关系运算符要高。

13、用双引号引起的字符串,代表的是一个纸箱无名数组起始字符串的指针。

14、在函数声明时省略了返回值类型,而且数组的大小必须在编译期就作为一个常数确定下来。而C语言中数组的元素可以是任何类型的对象,当然也可以是另外一个数组。这样,要仿真出一个多维数组就不是一件难事。

15、(1)int a[3],*p;    p = a;

(2)int a[3],*p;p = &a;

其中(1)是将a中下标为a的元素的地址赋值给p;(2)中&a是一个纸箱数组的指针,而p是一个指向整数的指针,他们类型不匹配,故p = &a为非法的。

16、字符串常量代表了一块包括字符串中所有字符以及一个空字符的内存区域的地址。试图修改字符串常量的行为是未定义的,如指针指向一常量字符串,然后试图通过指针来修改所指向的常量。

17、当常量0倍转换为指针使用时,这个指针绝对不能被解除引用。合法的写法(if(p== (char*)0)...)

18、C语言中其他所有运算对其操作数求值得顺序是未定义的。特别是复制运算符并不保证任何求值顺序。

19、如果一个函数在被定义之前被调用,那么它的返回类型就默认为整形。

20、宏定义不是函数,也不是类型定义,对类型的定义最好用typedef。

 

21、C++语言并没有定义任何输入输出语句。取而代之,包含了一个全面的标准库中提供IO机制。

22、命令空间可以帮助我们避免不经意的名词冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都是在命名空间std中。标准头文件通常不带后缀。

23、当一个算术表达式中既有无符号数又有int值时,那么int值就会转换为无符号数。因此,切勿混用带符号型和无符号类型的。

24、对象是指一块能存储数据并且具有某种类型的内存空间。对象是指能够被程序修改的数据,而值指只读的数据。

25、extern变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其声明,绝对不能重定义。

26、用户定义标识符中不能连续出现两个下划线,也不能以下划线紧跟大写字母开头。此外,定义函数体内的标识符不能以下划线开头。

27、引用只能绑定到一个对象上,而不能与字符值或某个表达式的结果绑定在一起。指针本身就是一个对象,允许对指针赋值或拷贝。

28、注意指针的使用:int *pi = 0;pi = 0;*pi = 0指针赋值为0是将指针置空,指针解引用赋值是给指针指向的对象赋值,复制永远改变的是符号左侧的对象。

29、不能直接操作void*指针所指向的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定在这个对象上做哪些操作。以void*的视觉来看,内存空间也就仅仅是内存空间,没办法访问内存空间中所存的对象。

30、指针是一个对象,所以存在对指针的引用。如:int *&r;r引用一个int指针。

31、引用类型必须和其所引用的类型保持一致,但是有两个情况例外。第一种例外情况就是初始化常量引用时允许用任意表达式作为初始值,只要改表达式的结果能够转换成引用类型即可。其二,允许一个常量引用绑定非常量的对象,字符值,甚至是个一般表达式。

32、类内初始值的限制与之前的类似,或者放在活括号里,或者放在符号右边,记住不能使用圆括号。

33、decltype((variable))的结果永远是引用,而decltype(variable)的结果只有当里面的variable本身是一个引用时才是引用。

34、类内初始值得限制于之前的类似,或者放在花括号里,或者放在等号右边,记住不能使用圆括号。

35、预处理变量无视C++语言中关于作用于的规则。

0 0
原创粉丝点击