вернуть mpz_t из функции

У меня возникла проблема при использовании библиотеки mpir в C ++. Можно ли вернуть значение mpz_t из функции? Когда я пытаюсь это сделать, у меня появляется следующая ошибка:

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

0

Решение

Нет, это невозможно. Тип 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 использует это преимущество.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]