这个问题已经在这里有了答案: 已关闭8年。 运行此命令时,我得到编译器警告:34 [警告]`Rational test4()的地址将始终为true。但我正在尝试使默认构造函数为有理数0/1。第34行是int main()行:cout #include <iostream>using namespace std;class Rational{public: Rational(); friend ostream& operator <<(ostream& out,Rational rational1);private: int numerator; int denominator;};int main(){ //Rational test1(24,6), test2(24); Rational test4(); //cout << test1<< endl; //cout << test2<< endl; cout << test4; system("pause");}Rational::Rational() : numerator(0), denominator(1){ //empty body}ostream& operator <<(ostream& out,Rational rational1){ out << rational1.numerator <<"/"<<rational1.denominator; return out;} 最佳答案 您的程序打印“1”的原因是因为Rational test4();声明了一个函数指针。那么std::cout如何打印函数指针?它涉及自动转换。首先看一下普通的旧数据指针。 I / O设备没有用于打印double*指针或MyClass*指针或可能出现的众多指针的机制。 I / O机制可以做的是一种打印void*指针的机制。由于隐式转换,该相同的机制适用于double*和MyClass*指针,因为所有指针都转换为void*指针。函数指针不会转换为void*。函数指针不是指针!唯一可用的转换是 bool(boolean) 值。转换为boolean就是像if (function_pointer) do_something();这样的工作了。函数指针不为null,因此在转换为bool时,它变为true,并打印为1。解决方案很简单:将Rational test4();更改为Rational test4;`,关于c++ - 为什么我的默认构造函数返回 boolean 值? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12791152/
10-12 16:15