return mpz_t 来自函数
return mpz_t from a function
我在 C++ 中使用 mpir 库时遇到问题。是否可以从函数中获取 return 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];
并且函数不能 return 数组。
这意味着你可以定义一个mpz_t
类型的对象,然后将其作为参数传递给函数,允许函数修改它的值(因为数组衰减为指针)。
您在评论中写道:
I do not understand why there are function declarations who are said to return mpz_t
in the documentation.
文档显示了几个 宏 ,而不是实际函数 mpq_numref
和 mpq_numden
,它被描述为 returning mpz_t
值。事实上,它们都产生一个结果,其类型是指向 mpz_t
数组 (__mpz_struct*
) 的元素类型的指针。该值可以传递给记录为采用 mpz_t
参数的函数,但实际上所有此类函数都采用指针参数。
C 和 C++ 不允许数组类型的参数或 returning 数组值的函数,但它们有几个功能可以让您编写看起来可能的代码。数组类型的表达式在大多数情况下会转换为指针,而数组类型的函数参数"adjusted"是指针参数。 (就个人而言,我不太喜欢 GMP / MPIR 利用这一点的方式。)
我在 C++ 中使用 mpir 库时遇到问题。是否可以从函数中获取 return 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];
并且函数不能 return 数组。
这意味着你可以定义一个mpz_t
类型的对象,然后将其作为参数传递给函数,允许函数修改它的值(因为数组衰减为指针)。
您在评论中写道:
I do not understand why there are function declarations who are said to return
mpz_t
in the documentation.
文档显示了几个 宏 ,而不是实际函数 mpq_numref
和 mpq_numden
,它被描述为 returning mpz_t
值。事实上,它们都产生一个结果,其类型是指向 mpz_t
数组 (__mpz_struct*
) 的元素类型的指针。该值可以传递给记录为采用 mpz_t
参数的函数,但实际上所有此类函数都采用指针参数。
C 和 C++ 不允许数组类型的参数或 returning 数组值的函数,但它们有几个功能可以让您编写看起来可能的代码。数组类型的表达式在大多数情况下会转换为指针,而数组类型的函数参数"adjusted"是指针参数。 (就个人而言,我不太喜欢 GMP / MPIR 利用这一点的方式。)