相对于静态变量为常量的静态成员函数
Static member functions that are const with respect to static variables
在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
成员函数中使用来更改类的静态成员变量,从而更改const成员函数foo
的结果。
你能把bar
声明为相对于my_static_int
的常量吗?
原始代码(我只整理了格式):
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
,不可访问,默认情况下:它不可用。
这就是为什么发布真实代码如此重要的一个例子。
然后你问:
“关于
my_static_int
,你能宣布bar
为const
吗”
是的,但是没有直接的语法。
您必须使用现有的语言功能。
他们足以胜任这项任务。
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 ) {}
};
您能声明bar相对于my_static_int是静态的吗?
没有。C++还没有提供这样的机制。
这让我深感困扰,因为人们会认为const成员函数foo不会更改类中的任何内容
你不应该这么认为。const方法可能会修改静态变量,因为这些变量不是被声明为const的实例的一部分。
它还可以修改标记为mutable
的变量。或者已经用const_cast
消除了恐惧的成员。
而且const
函数可以观察或修改类外的变量,所以您永远不应该认为const
函数每次被调用时都会有相同的行为。例如,您可以让const
函数返回rand()
。
请参阅此问题以更好地理解const
在C++中的含义
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 为什么传递非静态成员函数会导致编译错误?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 在 stream_descriptor::async_wait 中无效使用非静态成员函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 在类定义中推导内联静态成员函数的返回类型
- `enable_if()`以禁用模板化类的静态成员函数声明
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 常量静态成员函数
- 使用 vector.sort() 的非静态成员函数无效使用
- 从静态成员函数访问私有非静态类变量 - C++