使用cout的c ++静态方法输出始终为1

use*_*757 1 c++ methods static

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出是1.即使我改变stu::no了它也只是{return 12;} 为什么它会发生?我如何解决它??

Dav*_*e S 7

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

如果没有(),我相信它会作为指针进行评估,而不是按照你期望的那样做.

编辑:正如@Loomchild所指出的那样,使用g++ -Wall将提供关于为什么它始终为1的进一步见解.指向静态函数的指针总是true在此上下文中进行评估,因此打印的值.

  • `g ++ -Wall`警告如下:`警告:'static int stu :: no()'的地址总是评估为'true' (3认同)