程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++與C的差別剖析

C++與C的差別剖析

編輯:關於C++

C++與C的差別剖析。本站提示廣大學習愛好者:(C++與C的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++與C的差別剖析正文


雖然說C++是向後兼容C的,但C++與C照樣存在很多差別。本文羅列了幾個例子加以解釋,同時這些也是我們異常輕易疏忽的處所。本文僅簡略的羅列幾例,更多的分歧的地方讀者還須要在進修與理論中赓續的停止挖掘和總結。

C編譯經由過程但C++編譯欠亨過:

1、C++中編譯器不許可在一個函數聲明之前挪用它,但C中編譯器是許可的。

#include<stdio.h> // 請用gcc和g++分離停止編譯 
int main() 
{ 
  foo();   // foo()在它的聲明/界說之前被挪用 
}  
 
int foo() 
{ 
  printf("Hello"); 
  return 0;  
} 
 

2、C++中不克不及用一個通俗指針指向一個常量,但C中可以。

#include <stdio.h> // 請用gcc和g++分離停止編譯 
  
int main() 
{ 
  int const j = 20;  
  /* C++編譯會報錯,C中編譯會有warning,但可以經由過程 */ 
  int *ptr = &j;  
  printf("*ptr: %d\n", *ptr); 
  return 0; 
} 

3、在C說話中,void指針可以直接賦給其他類型的指針,如int *, char *等。但在C++中,void指針必需要明白地停止類型轉換。(malloc函數前往值為void *類型)

#include <stdio.h> // 請用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<stdio.h> // 請用gcc和g++分離停止編譯 
int main() 
{ 
 printf("%d", sizeof('a')); 
 return 0; 
} 

5、在C中界說構造體必需應用`struct`症結字,但在C++中可以省略。在C++中部分變量會籠罩同名的全局變量,但在C中卻不會。

#include <stdio.h> // 請用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 <stdio.h> // 請用gcc和g++分離停止編譯 
 
int main() 
{ 
  printf("%d\n", sizeof(1==1)); // C輸入4,C++輸入1 
  return 0; 
} 

本文僅對C++與C的差別做一個簡略的剖析與總結,信任關於年夜家更好的懂得C與C++起到必定的贊助感化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved