[英]pointer to void
完全使用void*
(無論是否為const
)的原因是它提供的通用性。 這就像一個基類:所有指針都是 void*
,可以隱式轉換為它,但是從void*
到類型化指針的轉換必須顯式且手動進行。
通常,C ++提供了更好的方法來執行此操作(即OO和模板),因此,除非您與C相連,否則根本不要使用void*
。但是,如果使用C,則使用const
在其他地方提供它提供的功能:您需要一個(附加) const_cast
才能更改所引用的對象,因此不太可能意外更改它。
當然,這不依賴於您不采用C樣式強制轉換,而是顯式C ++強制轉換。 從void*
到任何T*
需要static_cast
,這不允許刪除const
。 因此,您可以使用static_cast
將const void*
static_cast
為const char*
,而不能static_cast
為char*
。 這將需要一個額外的const_cast
。
在c ++中,指針前面的const表示不應更改指針地址處的數據。 即它阻止某人這樣做:
int v1 = 3;
int v2 = 4;
const int *pv = &v1;
pv = &v2 // ok;
*pv = 5; // error
您還可以使指針值本身為const:
int v1 = 3;
int v2 = 4;
int * const pv = &v1;
*pv = 5; // ok
pv = &v2; // error
您還可以將兩者結合起來:
int v1 = 3;
int v2 = 4;
const int * const pv = &v1;
*pv = 5; // error
pv = &v2; // error
有一個簡單的區別。 如前所述,由於C ++具有更好的類型系統,模板等,因此在C ++中幾乎不需要使用void*
。但是,當與C或系統調用接口時,有時需要一種方法來指定沒有已知類型的值。
正如您所問的那樣, void*
和const void*
之間的區別是一個提示,向您顯示是否將在所調用的函數內修改指向內存的內容, const
意味着它將具有只讀訪問權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.