intN_t, uintN_t

来看一下定长整数类型都叫什么名字吧。

g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

using int128_t = __int128_t;

using uint128_t = __uint128_t;

#include <bits/stdc++.h> // cstdint
using namespace std;
int8_t i8 = 0;
int16_t i16 = 0;
int32_t i32 = 0;
int64_t i64 = 0;
uint8_t u8 = 0;
uint16_t u16 = 0;
uint32_t u32 = 0;
uint64_t u64 = 0;
using int128_t = __int128_t;
using uint128_t = __uint128_t;
int128_t i128 = 0;
uint128_t u128 = 0;
int main() {
  cout << sizeof i8 << endl;
  cout << sizeof i16 << endl;
  cout << sizeof i32 << endl;
  cout << sizeof i64 << endl;
  cout << sizeof i128 << endl;
  cout << sizeof u8 << endl;
  cout << sizeof u16 << endl;
  cout << sizeof u32 << endl;
  cout << sizeof u64 << endl;
  cout << sizeof u128 << endl;
  cout << boolalpha;
  cout << is_integral<int8_t>() << endl;
  cout << is_integral<int16_t>() << endl;
  cout << is_integral<int32_t>() << endl;
  cout << is_integral<int64_t>() << endl;
  cout << is_integral<int128_t>() << endl;
  cout << is_integral<uint8_t>() << endl;
  cout << is_integral<uint16_t>() << endl;
  cout << is_integral<uint32_t>() << endl;
  cout << is_integral<uint64_t>() << endl;
  cout << is_integral<uint128_t>() << endl;
  return 0;
}

输出

1
2
4
8
16
1
2
4
8
16
true
true
true
true
false
true
true
true
true
false

前 10 行符合预期,但是后 10 行 __int128 的两个类型无法识别(在开启 -std=c++14),使用时需要注意,必要时添加特化。

怎么添加特化呢?

template <> struct std::is_integral<int128_t> : true_type {};
template <> struct std::is_integral<uint128_t> : true_type {};

这个 std:: 必须添加,否则会获得编译错误。但是 std::true_typestd:: 又不一定要加。

posted @   caijianhong  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示