【问题标题】:Is boost::multiprecision::cpp_int a POD?boost::multiprecision::cpp_int 是 POD 吗?
【发布时间】:2014-04-08 15:06:07
【问题描述】:

我打算使用具有boost::multiprecision::cpp_int (see Boost Multiprecision) 作为数据成员的类,我希望使用boost::fast_pool_allocator Boost custom allocator 在堆上管理这些类的实例。

为了安全起见,我需要知道 boost::multiprecision::cpp_int 是一个 POD(或者至少它不会在堆上分配 - 即纯粹基于堆栈)。

boost::multiprecision::cpp_int 是 POD 吗?

谢谢!

【问题讨论】:

  • 想一想,它长大后可能延伸到哪里?在您链接的文档中,还有什么可能“确定在诉诸动态内存分配之前直接存储在对象中的位数”是什么意思?
  • 是的 - 这对我来说很明显,谢谢。

标签: c++ boost pool multiprecision


【解决方案1】:

为什么不写一个小程序来找出答案呢?

#include <iostream>
#include <type_traits>
#include <boost/multiprecision/cpp_int.hpp>

int main()
{
    std::cout << std::is_pod<boost::multiprecision::cpp_int>::value << std::endl;
}

在我的平台(gcc 版本 4.8.2)上,输出为 0,表示该类型不是 POD 类型。

【讨论】:

  • 是否有类型特征类可以指示它是否在堆上分配?我认为我的 POD 限制可能过于严格。我只需要知道它是完全基于堆栈的。
  • 以下是 C++ 中包含的类型特征列表:en.cppreference.com/w/cpp/header/type_traits
【解决方案2】:

答案来自@PlasmaHH 的评论,回想起来很明显,不,boost::multiprecision::cpp_int 不是 POD

引用 PlasmaHH:

想一想,它可能延伸到什么时候 它长大了吗?还有什么可能“确定要 在诉诸动态内存之前直接存储在对象中 分配”在您链接的文档中是什么意思?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多