4

C++ で mpir ライブラリを使用中に問題が発生しました。関数から mpz_t 値を返すことは可能ですか? やろうとすると、次のエラーが発生します。

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

1 に答える 1

5

いいえ、できません。型mpz_tは配列型として定義されます。

typedef __mpz_struct mpz_t[1];

関数は配列を返すことはできません。

これは、型のオブジェクトを定義し、mpz_tそれを引数として関数に渡して、関数がその値を変更できることを意味します (配列はポインターに減衰するため)。

コメントで、次のように書きました。

ドキュメントに戻ると言われている関数宣言がある理由がわかりませんmpz_t

ドキュメントには、実際の関数ではなく、戻り値として説明されているいくつかのマクロが示されています。実際、どちらも結果の型が配列の要素型へのポインタ( ) である結果を生成します。その値は、引数を取ると記載されている関数に渡すことができますが、実際には、そのような関数はすべてポインター引数を取ります。mpq_numrefmpq_numdenmpz_tmpz_t__mpz_struct*mpz_t

C および C++ では、配列型のパラメーターまたは配列値を返す関数は許可されませんが、それが可能であるかのように見えるコードを記述できる機能がいくつかあります。配列型の式は、ほとんどのコンテキストでポインタに変換され、配列型の関数パラメータはポインタ パラメータになるように「調整」されます。(個人的には、GMP / MPIR がこれを利用する方法はあまり好きではありません。)

于 2016-01-25T22:27:33.857 に答える