【问题标题】:Exponential Shorthand for Integers整数的指数简写
【发布时间】:2019-01-28 03:05:30
【问题描述】:

所以我的理解是:1e3 等于 1000.0

我的问题是,整数有类似的简写吗?我意识到我可以做到:static_cast<int>(1e3)。除此之外,我还有什么可用的吗?

【问题讨论】:

  • 您可以创建 UDL 吗?我相信这是可以做到的
  • 除此之外我还有什么可用的吗?我猜你要的是已经内置在语言或标准库中的东西。
  • 二进制已经是整数的指数简写。一元是长格式:X = 1、XX = 2、XXX = 3 等。
  • @stark 这完全无关
  • @RSahu 是的,我希望语言中内置了一些东西。

标签: c++ floating-point integer exponential static-cast


【解决方案1】:

不,C++ 中没有科学记数法整数文字的语法。

您可以使用用户定义的文字来缩短转换:

constexpr int operator "" _i(long double d) noexcept {
    return d;
}

int main() {
    auto big = 1e3_i; // is int
}

但是,这确实(至少在我测试的 GCC 上)可以防止编译器在初始化时注意到溢出,因此在可能的情况下,请选择更传统的:

int big = 1e30; // compiler should yell at you

【讨论】:

  • 那可以是constexpr 对吧? “常量积分表达式”有显着优势,例如可用于数组边界、模板参数等。
  • @BenVoigt 据我所知,是的。也可以是noexcept
  • 非常有趣 - 并且很好地使用了long double。该函数还可以检测转换是否精确
  • @chux 你会建议函数在这种情况下抛出吗?
  • 如果你将变量标记为constexpr for constexpr int big = 1e30_i;,编译器就会对你大喊大叫。基本上,如果operator""_i() 被评估为constexpr,你会得到一个编译错误,因为constexpr 中不允许溢出。
猜你喜欢
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 2019-10-27
  • 2017-01-30
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多