1、C++的const比C语言#define更好的原因?
首先,它能够明确指定类型,有类型检查功能。
其次,可以使用C++的作用域规则将定义限制在特定的函数[常函数]或文件中。
第三,可以将const用于更复杂的类型,比如数组和结构。
C语言中也有const,在C语言中分配内存,其与C++中const的区别是:一是作用域规则不同;另一个是,在C++中可以用const值来声明数组长度。在C++中const在没有取地址和加extern时,是不分配内存空间的,和#define有相同的效果,常量折叠。
注意:外部要能访问test.cpp中的const形式的n, 必须在test.cpp中定义的时候用extern限定。
test.cpp
extern const int n = 100; //必须加extern
#include <iostream>
using namespace std;
extern const int n;
int main()
{
cout << n << endl;
return 0;
} </iostream>
2、逗号运算符
逗号运算符的特性有下面几个:
(1)它确保先计算第一个表达式,然后计算第二个表达式;
i = 20, j = 2 * i; // i set to 20, then jset to 40
(2)逗号表达式的值是第二部分的值。例如,上面表达式的值为40。在所有运算符中,逗号运算符的优先级是最低的。例如:
cats = 17, 240; //被解释为:(cats =17), 240;
也就是说,将cats设置为17,后面的240不起作用。如果是:
cats = (17, 240); //cats=240。
3、不能简单地将整数赋给指针,如下所示:
int *ptr;
ptr = 0x12342342; // type mismatch
在这里,左边是指向int的指针,但右边是一个整数。在C99标准发布之前,C语言允许这样赋值。但C++在类型一致方面的要求更严格,编译器将显示一条错误消息,通告类型不匹配。要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:
int *ptr;
ptr = (int *) 0x12342342; // type now match
这样,赋值语句的两边都是整数的地址,因此这样赋值有效。但是这样做很危险。随意的数值可能是指向系统的重要文件,这样就会是系统崩溃。
注意,pt是int值的地址并不意味着pt本身的类型是int。例如,在有些平台中,int类型是个2字节值,而地址是个4字节值。
4、C++的多态性分为静态多态和动态多态。
静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的;
动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。