在C++中,如何声明类的静态成员函数为const
相对于该类的成员变量静态?与静态变量相关的静态成员函数
考虑下面的简单例子。
myclass.h:
class myclass
{
myclass()
{
myint = 0;
}
~myclass() { }
int myint;
static int my_static_int;
void foo(const int yourint) const;
static void bar(const int newint);
};
myclass.cpp:
myclass::my_static_int = 0;
void myclass::foo(const int yourint) const
{
if (yourint <= myint + my_static_int)
std::cerr << "yourint <= myint + my_static_int";
else
std::cerr << "yourint > myint + my_static_int";
bar(yourint);
}
void myclass:bar(const int newint)
{
my_static_int = newint;
}
的main.cpp
...
myclass A;
A.foo(4);
A.foo(4);
..
输出将是:
yourint > myint + my_static_int
yourint <= myint + my_static_int
显然,bar
可用于内const
成员函数改变静态成员变量类的,从而改变常量成员函数foo
的结果。
对于my_static_int
,您可以声明bar
为const吗?
没有办法做到这一点,你误解了'const'的含义。 'const'只意味着这个函数不会修改任何非'mutable'成员变量_,而不是每次调用它时都会“具有相同的输出”。例如,如果你在'const'成员函数中有一个'static'变量,并在每次调用时递增并返回它呢?它仍然是'const',但每次都返回一个不同的值。 –
@SethCarnegie没错。我问了这个问题,因为似乎没有办法将“常量”静态成员函数与“非常量”静态成员函数区分开来,其中“常量”是关于静态成员变量的。 – cmo
@SethCarnegie不,我没有理解const的含义。我实际上表明了我对这个问题的理解。相反,你显然没有阅读我的问题,因为你的“评论”仅仅提出了我的问题提出的另一个例子。 – cmo