首页 > 解决方案 > 将 mpz_class 临时转换为 int

问题描述

作为我的代码逻辑的一部分,我将涉及 mpz_class 的表达式的结果分配给一个 int。问题是, mpz_class 重载运算符似乎不会产生 mpz_class 对象,而是某种临时对象,然后转换为 mpz_class (如果我理解正确的话)。因此,有什么方法可以将 bignum % 10 的结果转换为 int inline?

int digit_sum = 0;
while(bignum > 0) {
    digit_sum += bignum % 10;
    bignum /= 10;
}

标签: c++gmp

解决方案


GMP 库使用表达式模板来避免不必要的临时变量。因此,bignum % 10返回一个代表表达式的代理,并且仅在转换为mpz_class. 此外,mpz_class不会隐式转换为int. 因此,正如评论中提到的,您需要先转换为mpz_class,然后使用转换为的get_si方法。mpz_classlong

digit_sum += mpz_class{bignum % 10}.get_si();

请注意,一般情况下,您需要确保该号码long在调用之前确实适合get_si。在这种情况下,(绝对)数字始终小于 10,因此调用 是安全的get_si


推荐阅读