我在 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_numref
并且mpq_numden
,它描述为返回mpz_t
值。事实上,它们都产生一个结果,其类型是指向mpz_t
数组元素类型的指针 ( __mpz_struct*
)。该值可以传递给记录为接受mpz_t
参数的函数,但实际上所有此类函数都接受指针参数。
C 和 C++ 不允许使用数组类型的参数或返回数组值的函数,但它们有几个特性可以让您编写看起来似乎可行的代码。在大多数情况下,数组类型的表达式被转换为指针,并且数组类型的函数参数被“调整”为指针参数。(就个人而言,我不是 GMP / MPIR 利用这一点的方式的忠实拥护者。)