在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