#include <gmpxx.h>
int main() {
mpq_class a("1/-2");
mpq_class b("1/-3");
mpq_class c = a + b;
printf("%s\n", c.get_str().c_str());
}
根据 GMP 的手册,当将无效的表示字符串传递给构造函数时,应该引发异常。但是 GMP 在这种情况下不会。
此外,尝试下面的代码,这会导致 Segfault:
#include <gmpxx.h>
class Container {
public:
mpq_class rat;
Container(mpq_class _rat) : rat(_rat) {}
};
int main() {
mpq_class a("1/-3");
Container *c = new Container(a);
}
它是一个错误吗?GMP 是如此知名,以至于我无法相信它会如此轻易地崩溃。