簡體   English   中英

C ++強制轉換顯式類型轉換(C樣式轉換)和static_cast的多種解釋

[英]C++ cast notation of explicit type conversion (C-style cast) and multiple interpretations of static_cast

[expr.cast]的第4段 (在撰寫本文時可用的C ++標准的最新草案中)描述了C風格演員的行為,如下所示:

由...執行的轉換

  • 一個const_cast
  • 一個static_cast
  • static_cast后跟const_cast
  • reinterpret_cast ,或
  • 一個reinterpret_cast后跟一個const_cast

可以使用顯式類型轉換的強制轉換表示法執行。 應用相同的語義限制和行為,但在以下情況下執行static_cast ,即使基類不可訪問,轉換也是有效的:

  • 指向派生類類型的對象的指針或派生類類型的左值或右值可以分別顯式轉換為指針或對明確基類類型的引用;
  • 指向派生類類型成員的指針可以顯式轉換為指向非明確的非虛基類類型成員的指針;
  • 指向明確的非虛基類類型的對象的指針,明確的非虛基類類型的glvalue,或指向非明確的非虛基類類型的成員的指針可以被顯式轉換為指針,a引用或指向派生類類型成員的指針。

如果轉換可以用上面列出的多種方式解釋,則使用列表中首先出現的解釋,即使由該解釋產生的轉換是格式錯誤的。 如果轉換可以多種方式解釋為static_cast后跟const_cast ,則轉換形式不正確 [...]

我的問題是“ 轉換如何以多種方式解釋為static_cast后跟const_cast ”?

謝謝。

像這樣的東西:

struct S {
    operator int const**() { return nullptr; }
    operator int *const*() { return nullptr; }
};

S s;
(int**)s;  // error: cannot cast from type 'S' to pointer type 'int **'

類似的轉換為int const**int *const*成功。 演示

暫無
暫無

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

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