在C ++中,如何针对该类的 static 成员变量声明类的静态成员函数为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
成员函数中使用来更改类的静态成员变量,从而更改结果 const 成员函数foo
。
你能否bar
宣布my_static_int
为{{1}}?
答案 0 :(得分:3)
原始代码(我只是整理了格式化):
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 );
};
在此课程中,默认情况下,所有内容均为private
,无法访问:它无法使用。
这就是为什么发布真实代码非常重要的一个例子。
然后你问:
“你能否就
bar
声明const
为my_static_int
?”
是的,但没有直接的语法。
您必须使用现有的语言功能。
他们足以胜任这项任务。
class something
{
private:
int my_int;
public:
void bar( int const newint ) const;
something();
};
class myclass
{
private:
int myint;
static something;
public:
void foo( int const yourint ) const;
~myclass() {}
myclass(): myint( 0 ) {}
};
答案 1 :(得分:2)
你可以声明bar对于my_static_int是静态的吗?
没有。 C ++没有提供这样的机制。
这让我很烦恼,因为人们会假设多次调用 const成员函数foo不会改变类中的任何内容
你不应该这样认为。 const方法可以修改静态变量,因为这些变量不是被声明为const的实例的一部分。
它还可以修改标记为mutable
的变量。或者已使用const_cast
删除其常量的成员。
并且const
函数可以观察或修改类之外的变量,因此您不应该考虑const
函数在每次调用时都以相同的方式运行。例如,您可以返回const
函数返回rand()
。
请参阅this question以更好地理解C ++中const
的含义