从函数返回mpz_t

时间:2016-01-25 21:41:52

标签: c++ mpir

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

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

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。类型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利用这种方式的忠实粉丝。)