C++与C的区别

1)          函数声明

l       C如果不写返回值,默认是int,而C++中不能不写返回值(可用void表示无返回值)

Func1();

l       int Func1()C中表示可带任意参数的函数,这是C的漏洞,使得它避开了参数类型检查;而C++中表示不带参数的函数。

 

 

2)          头文件的区别

l       C++的头文件去掉了C中的.h,以c前缀开始。比如,<stdio.h> <stdlib.h>变为<cstdio> <cstdlib>

l       C.h的是非模板化的头文件,而C++是模板化的头文件。

.h文件是不含命名空间的,所以以前的<iostream.h>是不需要using的。

当然也可以用老的C头文件,但是,在同一个程序里不能混着用,虽然编译可以通过,但是可能会出现问题。

 

3)          register变量

C语言中,是不能对register变量取地址的,因为它没有虚地址,在寄存器里。而C++中,它是可以取址的,这时,C++编译器会忽略register,不会把它放到寄存器里。

 

4)          const变量

C语言中,const是只读的变量,不是常量;C++中它是常量。

区别用例子描述如下:

const int MAX = 10;

char buffer[MAX]; //C中它是不合法的,可以用enum

                                  define替代;

                               //C++中它是合法的。

 

本质C语言中const变量分配在全局静态区,默认是外部链接;C++中则在常量区,编译过程中值就定了,默认是内部链接,用extern可改为外部链接。

const int a; //C里是合法的,在C++里必须赋初值,因为C++里是编译期间就需要它的值了,而C里是保存在内存里而不是符号表里。

 

5)           typedef

C语言中,

struct A

{
};

A a; //这是错误的,在C++中是合法的。

struct A a; //这是正确的

用了typedef后,CA a;也是合法的了。

 

6)          struct/union/class

l       对于struct/union数据成员与函数成员的访问性来说,其默认是public

l       class则是private

l       union联合体不能作为基类继承。

union A

{
};

class B: public A //编译出错

{
};

l       匿名union

union

{

int a;

float b;
};

 

在程序里可以直接访问 ab所以,如果匿名union定义为全局的,注意使得它为内部链接的,否则很容易跟外面的变量起冲突。

定义为static即可为内部链接。

 

关于内部链接,请参考

http://blog.csdn.net/yeming81/archive/2010/05/31/5637704.aspx

 

7)          小作用域

C语言中,如下写法是会出编译错误的:

for( int i = 0; i < 10; i++)

{
}

 

 

8)          C语言没有函数重载

关于C++的函数重载,请参考

                 http://blog.csdn.net/yeming81/archive/2010/05/31/5637736.aspx

 

9)          类型安全链接

C语言中,

a.cpp

           void Func1( int ) { }

              

          b.cpp

           void Func1( char );

           int main()

 {

         Func1( 1 ); //C语言中是没有错误的,但C++不行。

 }

 

因为C++是类型安全链接的,对于Func1来说,它是内部链接的,它看不见a.cpp中定义的函数,它调用Func1_char函数,但是找不到实现。

 

可见:可以利用C++编译器去编译C语言程序,找出潜在的错误。

 

10)      C++有异常机制,而C没有。

关于异常,请参考

http://blog.csdn.net/yeming81/archive/2010/06/16/5673070.aspx

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值