簡體   English   中英

你如何使用 clang 的新自定義大小 int 功能?

[英]How do you use clang's new custom size int feature?

最近,我聽說 clang 有一個新功能, _ExtInt 我知道它可以讓你指定 integer 的大小(奇數或偶數 13 位整數),但你如何使用它?

_ExtInt將用作普通說明符。 例如:

_ExtInt(13) foo;

在這里你聲明 foo 是 13 位的。 記住不要在它前面放shortlong類型的關鍵字(因為它實際上沒有意義),盡管你可以放有signedunsigned (有signed是默認值)。 請注意,您不能做類似的事情; _ExtInt(5) + _ExtInt(6) 根據網站,這是因為:

WG14 論文建議將 integer 提升到最大的類型(即,添加 _ExtInt(5) 和 _ExtInt(6) 將導致 _ExtInt(6)),但是實現不允許這樣和 _ExtInt(5) + _ExtInt(6) 會導致編譯器錯誤。 這樣做是為了在 WG14 更改論文設計的情況下,我們將能夠在不破壞現有程序的情況下實施它。

這可以通過使用強制轉換來解決:

(_ExtInt(6))AnExtInt5 + AnExtInt6 or static_cast<ExtInt(6)>(AnExtInt5) + AnExtInt6

不僅如此,如果你使用 c++ 你可以做一些非常瘋狂的事情:

template<size_t WidthA, size_t WidthB>
  _ExtInt(WidthA + WidthB) lossless_mul(_ExtInt(WidthA) a, _ExtInt(WidthB) b) {
  return static_cast<_ExtInt(WidthA + WidthB)>(a) 
       * static_cast<_ExtInt(WidthA + WidthB)>(b);
} 

在這里查看更多詳細信息。

額外說明

  • 添加到_ExtInt(32)int將是一個 int。
  • 您的 int 大小可以是 go 最多116,777,215位。

注意:為了使用此功能,您需要最新版本的 clang,因為更改是在 2020 年 4 月 21 日進行的。

暫無
暫無

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

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