很多C++程序员,应该说是绝大多数,都学过C语言。也都知道,C++是完全兼容C的。在C++和C都作为面向过程开发语言时,这个“兼容”是有两层含义的:
第一,C中的所有代码复制到cpp文件里,编译肯定可以通过。
第二,C++代码,代码在C文件里是不一定允许编译的。
第二点是会慢慢被C++程序员所遗忘的,至少我是应当感到惭愧的其中之一。
下面一一列举一些,面向过程中易忽略的点(待续):
1、 C语言中不存在“引用”
请不要讲C++中引用的概念,想当然的带到C中,在C语言里没有引用这一说。符号“&”,很忠实地担当着取地址操作符这一独一无二的角色。
int f(int ¶)
{
return para;
}
以上这个函数声明在C中是绝对不合法的,要达到直接操作实参的效果,只能通过指针型参数来实现。
2、 强制类型转换操作符“()”
#include
int main()
{
int a=1;
printf("%c\n",char(a));
return 0;
}
在C中,以上这段代码是编译不通过的,C++程序员找这个错误是有点难的,大家可以想一想错在哪儿了,呵呵。
3、 C语言中没有函数模板,这个错在误编译时,会集中地暴露在class和typename这两个关键字上。
4、 C++中声明函数形参默认值的方式不能带到C中来
其实,早在C语言中,函数已经具有了多态特性,我们最常用的一个例子就是printf()函数。它的参数列表是可变的,但是这不是用简单的形参默认值实现的,它有专门的稍微复杂的方法实现。
5、 C语言中的前置自增和前置自减运算符不可做左值(栽过跟头)
int a=0;
++a=2;
这两行代码在cpp文件中编译时,是合法的,得到结果a=2。但是在C文件中会产生一个编译时错误,原因就在于C中的前置自增的结果不是左值的。