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_type
的 std::
又不一定要加。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18629812
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理