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

C++ MPFRC++ How to use memcpy() with mpfr::mpreal?

我找不到与此问题相关的任何内容。假设我在堆中有两个 mpfr::mpreal 数组,ab,如 new mpfr::mpreal[n]。由于调用和使用数组的函数,我必须使用 C 风格的数组。我无法修改它,我试过了,但它给出了错误的结果,而且会崩溃,对于我的关卡来说,这是一个相当大且复杂的函数。如果数组可以变大(大小和 type/precision),我想避免复制循环,我想改用 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 class 的赋值运算符复制循环中的每个对象(它进行必要的重新分配等)

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