从函数返回mpz_t

return mpz_t from a function

本文关键字:mpz 返回 函数      更新时间:2023-10-16

我在C++中使用 mpir 库时遇到问题。是否可以从函数返回mpz_t值?当我尝试这样做时,我遇到以下错误:

RSA.cpp:50:36: error: ‘HASHtemp’ declared as function returning an array
mpz_t RSA::HASHtemp( mpz_t message )

不,这是不可能的。 类型mpz_t定义为数组类型:

typedef __mpz_struct mpz_t[1];

并且函数不能返回数组。

这意味着您可以定义类型为 mpz_t 的对象,然后将其作为参数传递给函数,从而允许函数修改其值(因为数组衰减为指针)。

在评论中,你写道:

我不明白为什么文档中有函数声明据说返回mpz_t

该文档显示了几个,而不是实际的函数,mpq_numrefmpq_numden,它描述为返回mpz_t值。事实上,它们都产生一个结果,其类型是指向mpz_t数组(__mpz_struct*)的元素类型的指针。该值可以传递给记录为接受mpz_t参数的函数,但实际上所有此类函数都采用指针参数。

C 和 C++ 不允许数组类型的参数或返回数组值的函数,但它们具有多种功能,可让您编写看起来好像可行的代码。 在大多数情况下,数组类型的表达式被转换为指针,数组类型的函数参数被"调整"为指针参数。(就个人而言,我不是GMP/MPIR利用这一点的方式的忠实粉丝。