天天看點

C與C++的不同點C與C++的不同點

C與C++的不同點

首先聲明一下我這裡的不同點不是那些C有C++沒有或者C++有而C沒有的,而是一些都有的内容的不同的存在意義

1.記憶體管理

new/delete 是C++中具備申請釋放記憶體功能的運算符,功能相當于C中的malloc和free。
new類型:會自動計算類型所需要位元組數,然後從堆配置設定對應位元組數的記憶體,并傳回記憶體的首位址(具備類型)。
delete類型:delete 指針:會自動釋放堆記憶體
注意:new/delete 和malloc/free不能混用,因為在new和delete會自動調用類、結構的構造函數和析構函數,但其實new和delete的底層還是調用了malloc和free。
下面用一張表格來總結一下:
特征 new/delete malloc/free
本質 運算符 标準庫函數
參數 類型 位元組數
構成調用 自動調用 不調用
配置設定記憶體大小 自動計算 手動計算
傳回值 完成類型指針 void*類型指針
配置設定記憶體失敗 抛出異常 NULL

2.static關鍵字

C語言中static 關鍵字
  • 修飾函數名時,稱為靜态函數,隻允許該檔案在源檔案中調用,不能被其他檔案所調用
  • 修飾局部變量時,稱為靜态局部變量,該變量隻能在局部函數内,但出了作用域也不會釋放。
  • 修飾全局變量時,稱為靜态全局變量,該變量隻能在該檔案中調用,出了該檔案不能被調用

簡單的來說static的作用在C語言中可以分為隐藏和增加變量的内容的持久性

C++中static關鍵字

保留了C檔案的功能,增加了一些C++的獨有功能,可以修飾類的成員變量和成員函數,形成靜态成員和靜态成員函數。

3.const關鍵字

首先C/C++中const都是一種修飾符,表示具有隻讀屬性,一旦我們嘗試去修改這些被修飾的變量或者代碼時,編譯器就會給我們報錯,是以可以用來給我進行報錯。

C語言中const的使用一些規則:
  • 被const修飾的變量可以初始化,也可以不初始化
  • 被修飾的量不能被當做常量來使用,而是一種常變量,簡單來說還是一種變量隻是帶了常屬性,不能真的當做一個比如數組的長度來了解
  • 被const修飾的變量不能用于左值,就是不能被修改,因為是具有隻讀屬性
  • 常變量的編譯模式和普通變量時一樣的
C++語言中const的一些使用:
  • 被const修飾的一定要初始化
  • 被const修飾的變量可以被當做常量使用
  • 被const修的變量也可以變為常變量
  • 編譯模式,若在編譯時立即給出立即數,則變為常量,否則則是常變量
代碼例子:
const int a= 20;//常量
//----------------------
int b = 20;
const int a= b;//常變量
           
  • 由于C++對于類型的檢查會很嚴格是以在函數的傳參時,若直接以字面值傳輸在函數的參數表要加const,因為字面值具有常屬性
  • 在類中可以作為常函數,const是給this指針加的,在常函數内不能修改成員變量的值,普通的成員函數可以調用常函數,而常函數隻能調用常函數,如果真的需要在常函數中修改某個成員變量的值,則需要在該成員變量前加mutable修飾符
class A
{
public:
	void show(void) const
	{
	
	}
}
           
  • 常引用,在無名引用時必須使用無名引用或者在引用臨時變量
const int& b = 20;
const int& c = 10+20;
           

4.void*

C語言中 void* 可以與任意類型進行轉換
而C++中必須進行強制類型轉換才能給其他類型進行指派,而其他類型可以給void*類型進行自動指派
因為C++可以自動擷取類型是以對于萬能指針的需求不是很大。

繼續閱讀