C++程序员,

275阅读 0评论2011-05-16 clzhana
分类:

 

很多C++程序员,应该说是绝大多数,都学过C语言。也都知道,C++是完全兼容C的。在C++C都作为面向过程开发语言时,这个兼容是有两层含义的:

第一,C中的所有代码复制到cpp文件里,编译肯定可以通过。

第二,C++代码,代码在C文件里是不一定允许编译的。

第二点是会慢慢被C++程序员所遗忘的,至少我是应当感到惭愧的其中之一。

下面一一列举一些,面向过程中易忽略的点(待续):

1、        C语言中不存在引用

请不要讲C++中引用的概念,想当然的带到C中,在C语言里没有引用这一说。符号“&”,很忠实地担当着取地址操作符这一独一无二的角色。

int f(int &para)

{

    return para;

}

以上这个函数声明在C中是绝对不合法的,要达到直接操作实参的效果,只能通过指针型参数来实现。

 

2、     强制类型转换操作符“()

#include

int main()

{

  int a=1;

  printf("%c\n",char(a));

  return 0;

}

C中,以上这段代码是编译不通过的,C++程序员找这个错误是有点难的,大家可以想一想错在哪儿了,呵呵。

 

3、     C语言中没有函数模板,这个错在误编译时,会集中地暴露在classtypename这两个关键字上。

4、     C++中声明函数形参默认值的方式不能带到C中来

 

其实,早在C语言中,函数已经具有了多态特性,我们最常用的一个例子就是printf()函数。它的参数列表是可变的,但是这不是用简单的形参默认值实现的,它有专门的稍微复杂的方法实现。

 

5、     C语言中的前置自增和前置自减运算符不可做左值(栽过跟头)

 

int a=0;

++a=2;

这两行代码在cpp文件中编译时,是合法的,得到结果a=2。但是在C文件中会产生一个编译时错误,原因就在于C中的前置自增的结果不是左值的。

上一篇:C++和C
下一篇:C++/C经典教程(二)