簡體   English   中英

void和cv void之間有什么區別?

[英]What's the difference between void and cv void?

我在最新的C ++標准草案( N4606 )中遇到過類型“cv void”

8.3.3 [dcl.mptr],第3段

指向成員的指針不應指向類(9.2.3)的靜態成員,具有引用類型的成員或“cv void”

通過一些研究,我發現“cv void”是一個真實的類型 ,但我不知道與void類型相比有什么區別。 能用一個例子 (可能帶代碼)解釋一下嗎?


編輯

  • 我有點期望cv代表cv合格。 我的問題是,為什么我們需要“cv-qualify”類型無效?
  • 我說“cv void是一個真正的類型”的原因是,標准實際上定義了它:

    3.9.1 [basic.fundamental],第9段

    類型cv void是不完整的類型,無法完成; 這樣的類型有一組空值...

“cv void”不是真正的類型。 “cv”這里是“可能是cv-qualified”的簡寫,這意味着“可能有一個const或一個volatile ”。

該段落意味着指向成員的指針可能不指向以下類型的對象: voidconst voidvolatile voidconst volatile void 這是相當明顯的,因為這些對象首先不存在,但我想很清楚。

我們並不“需要”允許void被cv限定。 但是,允許它比制作一個禁止它的特殊例外更簡單。

但它實際上確實有一個重要的實際用途:允許void cv-qualified允許我們用指針到void來編寫cv-correct代碼。

“cv void ”表示可選地為constvolatile標准化的void 簡單void並不合格。

出於某種原因,有人顯然認為禁止成員指針是一個好主意(與普通指針相反)。
似乎有人不喜歡無類記憶...

為什么我們需要“ cv -qualify”類型void

同樣的原因你需要cv -qualify任何其他類型。 例如, memcpy的簽名是:

void* memcpy( void* dest, const void* src, std::size_t count );

src參數是一個指向const void ,這是因為存儲器所指向src不會被功能進行修改。 這讓我傳入一個指向const對象的指針:

const POD pod{...};
POD new_pod;
memcpy(&new_pod, &pod, sizeof(pod)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM