繁体   English   中英

Ubuntu 中的“int”

[英]“int” in Ubuntu

谁能告诉我,在编译 c++ 程序时,g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 是否将int s 更改为long int s? 如果是这样,如何改变? 如果没有,我是否只是重载operator long 是不是就像重载运算符 uint32_t/uint64_t 一样? 这似乎是一种不同类型的类型转换(不是双关语)。

导致错误:

uint128_t.h: In function ‘std::ostream& operator<<(std::ostream&,
uint128_t)’:
uint128_t.h:593: error: conversion from ‘uint128_t’ to ‘long int’ is
ambiguous
uint128_t.h:83: note: candidates are: uint128_t::operator uint64_t()
uint128_t.h:79: note:                 uint128_t::operator uint32_t()
uint128_t.h:75: note:                 uint128_t::operator uint16_t()
uint128_t.h:71: note:                 uint128_t::operator uint8_t()
uint128_t.h:67: note:                 uint128_t::operator int()
uint128_t.h:63: note:                 uint128_t::operator char()
uint128_t.h:59: note:                 uint128_t::operator bool()

不,它没有。 一个 int 是一个 int 是一个 int。 它是与long int不同的类型。 至于你重载哪些算子,完全看你想做什么 你还没有真正描述过。

但是如果你想定义一个操作符来处理int ,那么你应该为int重载它。 如果您希望它在long int上工作,请为此定义一个重载。

你想做什么? 为什么你将uint128_t传递给操作员,但询问intlong int

试试这个变化:

out = "0123456789abcdef"[size_t(rhs % div)] + out;

因为您提供了对各种无符号类型的转换,但没有提供对有符号整数的转换。


是的,您可以定义到long int的隐式转换,只需以与所有其他转换相同的方式定义operator long


最后,请注意,您选择的结构名称由 POSIX 保留,并且可能与标准库 header stdint.h的未来版本冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM