在 Boost ICL 中,当我在区间集上调用 cardinality() 或 size() 函数时,返回类型为 size_t,与区间类型无关。在 32 位机器上,这是一个 32 位无符号整数。但是,如果我的区间是 int64_t 类型,则基数很容易溢出 32 位整数。我在这里遗漏了一些明显的东西还是这个库的严重缺陷?
编辑:添加示例
以下代码在 64 位但在 32 位机器上编译和运行没有错误,它会抛出断言。
#include <boost/icl/interval_set.hpp>
int main()
{
boost::icl::interval_set<int64_t> is;
is.add(boost::icl::interval<int64_t>::closed(1, 4294967297LL));
assert(boost::icl::cardinality(is) == 4294967297LL);
}
编辑:我在 Ubuntu 13.10 上使用 boost::icl 版本 1.49.0
编辑:
这不是一个 32/64 位的问题,因为以下代码也不适用于 64 位
#include <boost/icl/interval_set.hpp>
int main()
{
boost::icl::interval_set<double> is;
is.add(boost::icl::interval<double>::closed(1, 1.5));
assert(boost::icl::cardinality(is) == 0.5);
}