您如何使用clang的新自定义大小int功能?

问题描述 投票:1回答:1

[最近,我听说clang具有一项新功能_ExtInt。我知道,它可以让您指定整数的大小(奇数或什至类似于13位int),但是如何使用它?

c++ c integer clang size
1个回答
3
投票

_ExtInt将用作常规说明符。例如:

_ExtInt(13) foo;

您在这里声明foo为13位。记住不要将shortlong类型的关键字放在前面(因为这实际上没有意义),尽管可以放置signedunsignedsigned是默认值)。请注意,您不允许做类似的事情; _ExtInt(5) + _ExtInt(6)。根据this网站,这是因为:

WG14建议将整数提升为最大的类型(即,添加_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);
} 

查看here了解更多详细信息。

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

© www.soinside.com 2019 - 2024. All rights reserved.