【问题标题】:Why std::numeric_limits::is_integer is false for volatile types?为什么 std::numeric_limits::is_integer 对于 volatile 类型为假?
【发布时间】:2017-05-11 16:49:59
【问题描述】:
std::numeric_limits<volatile int>::is_integer

评估为“假”。

但是为什么呢? volatile int 不还是整数类型吗?我想知道这其中是否有某种深意。

UPD:编译器是来自 Keil 4.72 的 armcc

【问题讨论】:

  • No repro,可能是它的实现定义。
  • 哪个编译器?
  • 它是true,带有在线版本的 gcc、clang(带有 libc++)、Intel、MSVC...如果您使用的是其中一个的旧版本,请考虑升级。
  • “编译器是来自 Keil 4.72 的 armcc” 我不相信这个编译器完全符合标准。
  • 原来的 C++98 标准中没有,而是 was added later

标签: c++ std volatile numeric-limits


【解决方案1】:

好吧,它的计算结果不是false,而是true

#include <iostream>
#include <limits>

int main() {
    std::cout << std::boolalpha << std::numeric_limits<volatile int>::is_integer << std::endl;
    return 0;
}

https://ideone.com/y3ne6Y

【讨论】:

  • 如果你之后仍然输入std::,为什么还要使用那个可怕的using namespace std;
  • @Quentin ideone 默认添加它。我忘了删除这条线。谢谢你指出:)
  • 我对 ideone 的一个疑虑就是那种可怕的行为。
  • 这是 ideone 的最小问题
【解决方案2】:

你在这里(或者,可能是你的编译器)错了,因为它应该是 true

来自numeric_limits页面:

此外,每个 cv 限定版本都有一个特化 每种算术类型,与无条件特化相同, 例如std::numeric_limits, std::numeric_limits 和 std::numeric_limits 被提供并且是 等价于 std::numeric_limits

来自numeric_limits/is_integer页面:

标准专业化:

...

真的

...

【讨论】:

  • 嗯。那很有意思。您能否告诉我 STL 是否以任何方式标准化?据我所知,C++ 标准没有描述它。
  • @Amomum 您可以查看第 18.3.2 节“数字限制”
  • @Amomum 以 std:: 开头的东西是 C++ 标准的一部分
  • @Amomum 我个人一直认为“S标准模板库”确实必须是标准的一部分......
  • @Amomum 哪个 C++ 标准没有描述 STL?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2016-07-06
  • 2011-02-15
  • 1970-01-01
  • 2012-12-01
  • 2018-05-11
相关资源
最近更新 更多