[英]How do you use clang's new custom size int feature?
最近,我聽說 clang 有一個新功能, _ExtInt
。 我知道它可以讓你指定 integer 的大小(奇數或偶數 13 位整數),但你如何使用它?
_ExtInt
將用作普通說明符。 例如:
_ExtInt(13) foo;
在這里你聲明 foo 是 13 位的。 記住不要在它前面放short
或long
類型的關鍵字(因為它實際上沒有意義),盡管你可以放有signed
或unsigned
(有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。1
到16,777,215
位。注意:為了使用此功能,您需要最新版本的 clang,因為更改是在 2020 年 4 月 21 日進行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.