C++與C的差異分析
雖說C++是向后兼容C的,但C++與C還是存在許多差異。本文列舉了幾個例子加以說明,同時這些也是我們非常容易忽略的地方。本文僅簡單的列舉幾例,更多的不同之處讀者還需要在學習與實踐中不斷的進行發(fā)掘和總結。
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++起到一定的幫助作用。