C++ 为什么我的默认构造函数返回bool?

C++ 为什么我的默认构造函数返回bool?,c++,constructor,boolean,C++,Constructor,Boolean,可能重复: 当我运行这个程序时,我得到了编译器警告:34[warning]rationaltest4()的地址将始终计算为true。但是我试图使它成为默认构造函数是有理数0/1。第34行是int main()行:cout程序打印“1”的原因是因为rationaltest4()声明函数指针。那么std::cout如何打印函数指针呢?它涉及自动转换。首先看看普通的旧数据指针。I/O机器没有打印double*指针或MyClass*指针的机制,也没有打印可能出现的无数个指针的机制。I/O机器所能做的是

可能重复:


当我运行这个程序时,我得到了编译器警告:34[warning]rationaltest4()的地址将始终计算为true。但是我试图使它成为默认构造函数是有理数0/1。第34行是int main()行:cout程序打印“1”的原因是因为
rationaltest4()声明函数指针。那么
std::cout
如何打印函数指针呢?它涉及自动转换。首先看看普通的旧数据指针。I/O机器没有打印
double*
指针或
MyClass*
指针的机制,也没有打印可能出现的无数个指针的机制。I/O机器所能做的是打印
void*
指针的机制。由于隐式转换,同样的机制适用于
double*
MyClass*
指针,因为所有指针都转换为
void*
指针


函数指针不会转换为
void*
。函数指针不是指针!唯一可用的转换是转换为布尔值。转换成布尔值就是让我们做的事情,比如
if(函数指针)do_something()
您的函数指针不是空的,因此当转换到
bool
时,它将变成
true
,打印为
1


解决方案很简单:更改
rationaltest4()
Rational
test4;`

程序打印“1”的原因是因为
rationaltest4()声明函数指针。那么
std::cout
如何打印函数指针呢?它涉及自动转换。首先看看普通的旧数据指针。I/O机器没有打印
double*
指针或
MyClass*
指针的机制,也没有打印可能出现的无数个指针的机制。I/O机器所能做的是打印
void*
指针的机制。由于隐式转换,同样的机制适用于
double*
MyClass*
指针,因为所有指针都转换为
void*
指针


函数指针不会转换为
void*
。函数指针不是指针!唯一可用的转换是转换为布尔值。转换成布尔值就是让我们做的事情,比如
if(函数指针)do_something()
您的函数指针不是空的,因此当转换到
bool
时,它将变成
true
,打印为
1


解决方案很简单:更改
rationaltest4()
Rational
test4;`

rationaltest4()声明一个函数,而不是一个对象。这是“最麻烦的解析”。另外,你的标题似乎与你的问题无关。这么简单的错误,谢谢!当我运行程序时,它将返回1。所以我认为1意味着它是真的。这就是标题的原因。“最麻烦的解析”是什么意思?我认为这只是一个普通的麻烦解析。最令人烦恼的是
S(S())左右。
RationalTest4()声明一个函数,而不是一个对象。这是“最麻烦的解析”。另外,你的标题似乎与你的问题无关。这么简单的错误,谢谢!当我运行程序时,它将返回1。所以我认为1意味着它是真的。这就是标题的原因。“最麻烦的解析”是什么意思?我认为这只是一个普通的麻烦解析。最令人烦恼的是
S(S())#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;
}