gpt4 book ai didi

C++ MFRC++ 如何将 memcpy() 与 mpfr::mpreal 一起使用?

转载 作者:行者123 更新时间:2023-11-28 02:00:02 24 4
gpt4 key购买 nike

我找不到与此问题相关的任何内容。假设我在堆中有两个 mpfr::mpreal 数组,ab,如 new mpfr::mpreal[n ]。由于调用和使用数组的函数,我必须使用 C 风格的数组。我无法修改它,我试过了,但它给出了错误的结果,而且会崩溃,对于我的关卡来说,这是一个相当大且复杂的函数。如果数组可以变大(大小和类型/精度),我想避免复制循环,我想改用 memcpy()。我应该使用什么作为第三个参数?

我尝试了 sizeof(mpfr::mpreal) 但它总是给出 32,无论我在 mpfr_set_default_prec() 中使用什么。在主页上我已经看到我可以使用 mpfr::machine_epsilon() 来更好地显示它,但是我如何在 memcpy() 中使用它?

最佳答案

mpfr::mpreal 变量(或它们的数组)是 C++ 对象,它不能被 memcpy 正确复制。请改用 std::copy 或循环。

memcpy 只是逐位复制内存块,这适用于简单的 POD C 风格数据结构。 C++ 对象应通过调用赋值运算符进行复制,以便对象可以自行处理内存分配等。

mpfr::mpreal 的大小始终相同,因为它只包含指向尾数的指针,尾数分配在不同内存位置的堆中。 memcpy 只复制指针,它不会重新分配尾数,因此源和目标 mpreals 将指向内存中的相同尾数。这正是应该避免的。反过来,std::copy 很好地处理了这一点 - 通过使用 mpreal 类的赋值运算符复制循环中的每个对象(它进行必要的重新分配等)

(我是 MPFR C++ 的作者)。

关于C++ MFRC++ 如何将 memcpy() 与 mpfr::mpreal 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com