1.Struct、Enum和Union的使用
在C中,不论是定义还是实例化,都必须在结构名前加上关键字struct、enum和union,而C++允许在实例化时使用名字而不需要加关键字,当然,如果你愿意也可以加。例:
/*C code*/
struct foo{
int i;
}
struct foo myfoo;//正确
foo myfoo;//错误
/*C++*/
struct foo{
int i;
}
foo myfoo;//正确
struct foo myfoo;//正确
2.函数参数的变化
在C中,函数具有空参数表示为func(void),而在C++中函数具有空参数表示为func(void)或者func(),而在C中func()表示参数为任意,相同的功能在C++中为func(...)。
3.void*指针
C和C++都允许隐示的将一个指针转换为void*型,如下:
void *v;
int *i;
v=i;
C还允许隐示的将void*转换为任何其他类型指针,而在C++中,为了安全,这个过程需要一个显示的类型转换,如下:
void *v;
int *i;
i=v;//在C中
i=(int *)v;//在C++中
4.enum与int
C++中强化了enum的类型规则,没有显示的类型转化,不能将一个int型赋给enum型变量了,如下:
enum foo {a,b,c,d};
foo my=2;//C正确,C++错误
foo my=(foo)2;//C++正确
5.全局变量的动态初始化
C中只能用常量表达式初始化全局变量,C++则取消了这个限制,如下:
int global=5;//C正确,C++正确
int global=myfunc();//C错误,C++正确
例:
/*ss.c*/
#include "stdio.h"
int my() { return 4; }
int c=my();
int main(){}
#gcc -o ss ss.c
ss.c:4: error: initializer element is not constant
/*ss.cpp*/
#include <iostream>
int my() { return 4;}
int c=my();
int main(){}
#g++ -o ss ss.cpp
#