C ++静态方法输出使用COUT始终为1(c++ static method output usin

2019-10-17 07:59发布

所以我有这样一类的一段代码:

#include<iostream>
#include<cstring>

class stu
{
    static int proba;
public:
    stu();
    static int no(){
        return proba;
    }
};

int stu::proba=0;

stu::stu()
{
    proba=proba+1;
}

int main()
{
    std::cout<< stu::no << std::endl;
}

输出为1。它这样做,即使我改变stu::no因此,这将是唯一的{return 12;}为什么会发生? 我如何解决它??

Answer 1:

将其更改为std::cout<< stu::no() << std::endl;

如果没有()我相信它的评估作为一个指针,而不是做你期待什么。

编辑:正如由@Loomchild指出的那样,使用g++ -Wall将提供进一步的深入了解,为什么它总是1.指针的静态功能总是评价为true在此背景下,正在打印因此值。



Answer 2:

std::cout<< stu::no << std::endl; 打印功能的地址,你不实际调用它。

std::cout<< stu::no() << std::endl;

调用函数并打印返回值。

在MSVS,这确实会产生一个指针值,与过载operator << (void*)



Answer 3:

使用STU ::没有()代替STU ::没有。 此外,未成年人的事情真的,但如果你把

使用命名空间std;

#包括下面你将不必使用std ::

只是使事情变得更具有可读性。



Answer 4:

stu::no是一个函数,它没有参数,返回int类型。

没有operator<<与您的特定签名需要的功能,所以可用过载被考虑。 长话短说,在operator<<(ostream&, bool)是最接近的匹配,在函数到指针和指针到布尔转换。

由于该功能确实存在,它的地址是绝对不为零,所以指针布尔转换总是会产生true ,你看到的1

让它std::cout<< std::boolalpha << stu::no << std::endl; 看到自己,这真的是一个布尔输出。

让它std::cout<< stu::no() << std::endl; 打印函数调用的结果。

请参阅如何打印函数指针与COUT? 如果您想了解更详细的事了。



文章来源: c++ static method output using cout is always 1