c++ - BOOST_STRONG_TYPEDEF 上的 numeric_limits 是错误的

标签 c++ boost numeric-limits

我假设 BOOST_STRONG_TYPEDEF 定义类型上的 numeric_limits::max() 会给出与基础类型相同的结果。但下面的程序表明情况并非如此(用g++或clang++与boost 1.65编译):

#include <boost/serialization/strong_typedef.hpp>
#include <limits>
#include <iostream>

BOOST_STRONG_TYPEDEF(uint64_t, s);

int main(int , char **)
{
  std::cerr << std::numeric_limits<uint64_t>::max() << std::endl 
            << std::numeric_limits<s>::max() << std::endl;
  return 0;
}

结果:

$ clang++ test.cpp
$ ./a.out
18446744073709551615
0

这是预期的结果吗?

最佳答案

I was supposing that numeric_limits::max() on a BOOST_STRONG_TYPEDEF defined type would give the same result than on the underlying type.

没有理由这样认为。

您实际上是在要求一种新类型。这就是拥有 typedef 的意义。这就是为什么您使用 BOOST_STRONG_TYPEDEF 而不是 typedef

std::numeric_limits 不会、不能也不应该为它不知道的类型(例如您创建的新类型)提供有意义的信息。

关于c++ - BOOST_STRONG_TYPEDEF 上的 numeric_limits 是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58819578/

相关文章:

c++ - 是否可以将 fusion 图嵌套在 fusion 图内?

c - scanf 成功但存储的值不适合某些大的 float

c++ - 在常量表达式中使用 numeric_limits::max()

c++ - 我应该用 'if' 语句统一两个相似的内核,冒着性能损失的风险吗?

c++ - 非标准代码,还是 g++ 错误?

c++ - 返回 std::vector - 正确的方法

带有外部库的 C++ Ruby 扩展

c++ - 如何消除动态销毁 boost::asio 实体时的崩溃?

c++ - 可序列化的 Boost 库 header 和仅 header 库

c - 为什么 FLT_MIN 等于零?