C语言与C++的区别( 二 )


顺带一提,C++可以使用关键字extern使一个const值具有外部链接 。所以两种语言都可以创建内部链接和外部链接的const变量 。它们的区别在于默认使用哪种链接 。
另外,在C++中,可以用const来声明普通数组的大小:
const int ARSIZE = 100;double loons[ARSIZE]; /* 在C++中,与double loons[100];相同 */
当然,也可以在C99中使用相同的声明,不过这样的声明会创建一个变长数组 。在C++中,可以使用const值来初始化其他const变量,但是在C中不能这样做:
constdoubleRATE = 0.06; // C++和C都可以const double STEP = 24.5; // C++和C都可以const double LEVEL = RATE * STEP; // C++可以,C不可以
5、结构和联合
声明一个有标记的结构或联合后,就可以在C++中使用这个标记作为类型名:
structduo{ inta; intb;}; structduom; /* C和C++都可以 */duo n; /* C不可以,C++可以*/
结果是结构名会与变量名冲突 。例如,下面的程序可作为C程序编译,但是作为C++程序编译时会失败 。因为C++把printf语句中的duo解释成结构类型而不是外部变量:
#includefloat duo = 100.3;int main(void){struct duo { int a; int b;};struct duo y = { 2, 4};printf ("%f\n", duo); /* 在C中没问题,但是在C++不行 */return 0;}
在C和C++中,都可以在一个结构的内部声明另一个结构:
struct box{struct point {int x; int y; } upperleft;struct point lowerright;};
在C中,随后可以使用任意使用这些结构,但是在C++中使用嵌套结构时要使用一个特殊的符号:
struct box ad; /* C和 C++都可以 */struct point dot; /* C可以,C++不行 */box::point dot; /* C不行,C++可以 */
6、枚举
C++使用枚举比C严格 。特别是,只能把enum常量赋给enum变量,然后把变量与其他值作比较 。不经过显式强制类型转换,不能把int类型值赋给enum变量,而且也不能递增一个enum变量 。下面的代码说明了这些问题:
enum sample {sage, thyme, salt, pepper};enum sample season;season = sage; /* C和C++都可以 */season = 2; /* 在C中会发出警告,在C++中是一个错误 */season = (enum sample) 3; /* C和C++都可以*/season++; /* C可以,在C++中是一个错误 */
另外,在C++中,不使用关键字enum也可以声明枚举变量:
enum sample {sage, thyme, salt, pepper};sample season; /* C++可以,在C中不可以 */
与结构和联合的情况类似,如果一个变量和enum类型的同名会导致名称冲突 。
7、指向void的指针
C++可以把任意类型的指针赋给指向void的指针,这点与C相同 。但是不同的是,只有使用显式强制类型转换才能把指向void的指针赋给其他类型的指针 。下面的代码说明了这一点:
int ar[5] = {4, 5, 6,7, 8};int * pi;void * pv;pv = ar; /* C和C++都可以 */pi = pv; /* C可以,C++不可以 */pi = (int * ) pv; /* C和C++都可以 */
C++与C的另一个区别是,C++可以把派生类对象的地址赋给基类指针,但是在C中没有这里涉及的特性 。
8、布尔类型
在C++中,布尔类型是bool,而且ture和false都是关键字 。在C中,布尔类型是_Bool,但是要包含stdbool.h头文件才可以使用bool、true和false 。
9、可选拼写
在C++中,可以用or来代替||,还有一些其他的可选拼写,它们都是关键字 。在C99和C11中,这些可选拼写都被定义为宏,要包含iso646.h才能使用它们 。
10、宽字符支持
在C++中,wchar_t是内置类型,而且wchar_t是关键字 。在C99和C11中,wchar_t类型被定义在多个头文件中(stddef.h、stdlib.h、wchar.h、wctype.h) 。与此类似,char16_t和char32_t都是C++11的关键字,但是在C11中它们都定义在uchar.h头文件中 。
C++通过iostream头文件提供宽字符I/O支持(wchar_t、char16_t和char32_t),而C99通过wchar.h头文件提供一种完全不同的I/O支持包 。


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: