gcc 使用流运算符输出128位整数

plupiseo  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(171)

我使用的是愚者的128位整数:

__extension__ using uint128_t = unsigned __int128;
uint128_t a = 545;
std::cout << a << std::endl;

但是,如果我尝试使用流操作符输出,我会得到编译器错误:

error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream’ {aka ‘std::basic_ostream<char>’} and ‘uint128_t’ {aka ‘__int128 unsigned’})

有没有办法允许这种情况发生?
Linux,愚者版本11.1,x86-64

oprakyz7

oprakyz71#

libstdc没有__int128ostream重载。但是,您可以使用C20 <format>库,该库在libstdc和libc中都支持__int128

#include <format>
#include <iostream>

int main() {
  __extension__ using uint128_t = unsigned __int128;
  uint128_t a = 545;
  std::cout << std::format("{}\n", a);
}

Demo

xoefb8l8

xoefb8l82#

您必须自己重载<<运算符,因为std::ostream没有该类型的重载,因为它来自外部库。This可能会有所帮助。

相关问题