当前位置:  编程技术>c/c++/嵌入式

C++与C的差异分析

    来源: 互联网  发布时间:2014-10-27

    本文导语:  虽说C++是向后兼容C的,但C++与C还是存在许多差异。本文列举了几个例子加以说明,同时这些也是我们非常容易忽略的地方。本文仅简单的列举几例,更多的不同之处读者还需要在学习与实践中不断的进行发掘和总结。 C编译通...

虽说C++是向后兼容C的,但C++与C还是存在许多差异。本文列举了几个例子加以说明,同时这些也是我们非常容易忽略的地方。本文仅简单的列举几例,更多的不同之处读者还需要在学习与实践中不断的进行发掘和总结。

C编译通过但C++编译不通过:

1、C++中编译器不允许在一个函数声明之前调用它,但C中编译器是允许的。

#include // 请用gcc和g++分别进行编译 
int main() 
{ 
  foo();   // foo()在它的声明/定义之前被调用 
}  
 
int foo() 
{ 
  printf("Hello"); 
  return 0;  
} 
 

2、C++中不能用一个普通指针指向一个常量,但C中可以。

#include  // 请用gcc和g++分别进行编译 
  
int main() 
{ 
  int const j = 20;  
  /* C++编译会报错,C中编译会有warning,但可以通过 */ 
  int *ptr = &j;  
  printf("*ptr: %dn", *ptr); 
  return 0; 
} 

3、在C语言中,void指针可以直接赋给其他类型的指针,如int *, char *等。但在C++中,void指针必须要明确地进行类型转换。(malloc函数返回值为void *类型)

#include  // 请用gcc和g++分别进行编译 
int main() 
{ 
  void *vptr; 
  int *iptr = vptr; // C++中必须用int *iptr = (int *)vptr; 
  return 0; 
} 

C和C++输出结果不相同:

4、字符常量在C和C++被当作不同地类型看待:在C中,字符常量如'a','b'被当作int型,而在C++中被当作char型。所以,在C中sizeof('A')相当于sizeof(int),输出为4;在C++中sizeof('A')仍相当于sizeof(char),输出为1。

#include // 请用gcc和g++分别进行编译 
int main() 
{ 
 printf("%d", sizeof('a')); 
 return 0; 
} 

5、在C中定义结构体必须使用`struct`关键字,但在C++中可以省略。在C++中局部变量会覆盖同名的全局变量,但在C中却不会。

#include  // 请用gcc和g++分别进行编译 
int T; 
  
int main() 
{ 
  struct T { double x; };  
  printf("%d", sizeof(T)); // C输出4,C++输出8 
  return 0; 
} 

6、布尔结果在C++和C中的表示是不同的。因为C语言不直接支持布尔型,所以其实返回的是int型,而C++则返回的是bool类型。所以sizeof(1==1)在C中是sizeof(int),在C++中是sizeof(bool)。

#include  // 请用gcc和g++分别进行编译 
 
int main() 
{ 
  printf("%dn", sizeof(1==1)); // C输出4,C++输出1 
  return 0; 
} 

本文仅对C++与C的差异做一个简单的分析与总结,相信对于大家更好的理解C与C++起到一定的帮助作用。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 文本差异比较 jsdifflib
  • 文件差异比较工具 Kompare
  • 关于gcc版本不同编译出内核差异问题
  • 用什么方法找到不同版本内核在编程方面的差异
  • Red Hat Linux与WindowsXP操作系统,其数据存取有什么差异?
  • 不同windows版本连接linux的差异?
  • linux系统mysql如何进行差异备份
  • 大家解释一下QT和MFC编程的差异,以及那里能够找到相关方面的资料!
  • 知识共享:从Linux到Solaris:概述和命令差异,学吧~,兄弟们!
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • Linux和DOS的实时性相比如何?谁能说一下两者差异的原理?100分立给。
  • 文件差异比较工具 Diffutils
  • /proc/PID/task/TID看到的TID和出来pthread_self() 的差异理解对不对?
  • shell脚本在不同操作系统中的差异
  • MS Server和Oracle中对NULL处理的一些细节差异
  • linux中动态路由和静态路由的区别?性能差异与相关性
  • top与ps命令输出结果差异以及top结果的重定向
  • sqlserver 手工实现差异备份的步骤
  • PHP fopen()和 file_get_contents()应用与差异介绍
  • 各浏览器padding、margin的差异


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3