The C++ interface implicitly converts rationals to integers
    Roberto Bagnara 
    bagnara at cs.unipr.it
       
    Fri Nov 18 22:49:49 CET 2005
    
    
  
Hi there.
The program
#include <gmpxx.h>
#include <iostream>
using namespace std;
void foo(const mpz_class& i) {
   cout << "foo::i = " << i << endl;
}
int main() {
   mpq_class r(3, 4);
   cout << "main::r = " << r << endl;
   foo(r);
   return 0;
}
prints
main::r = 3/4
foo::i = 0
This shows that the C++ interface of GMP defines an implicit constructor
for mpz_class that takes an mpq_class object and (silently) truncates it.
It is very bad practice for such a constructor to be implicit as this can
result in bugs that are very difficult to diagnose.  Of course I am not
questioning the need for such a conversion: I simply think that truncation
should only be performed when explicitly requested.
All the best,
    Roberto
-- 
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it
    
    
More information about the gmp-discuss
mailing list