iam*_*ind 11 c++ const-correctness static-members
使用案例:
class A {
static int s_common;
public:
static int getCommon () const { s_common; };
};
Run Code Online (Sandbox Code Playgroud)
通常,这会导致错误:
错误:静态成员函数'static int A :: getCommon()'不能有cv-qualifier
这是因为constness仅适用于指向的对象this,而该对象在static成员函数中不存在.
但是如果允许的话,static成员函数的"const"可能很容易与static数据成员相关.
为什么C++中不存在此功能; 它背后的任何逻辑原因?
但是如果允许的话,静态成员函数的"const"可能很容易与静态数据成员相关.
这是你的问题变得困惑的地方.声明为静态成员函数const仍然const无法访问静态数据成员.将const仅适用于this(即:非静态数据成员).
静态成员函数const在语法上以相同的方式使用,但具有完全不同的结果(即:访问静态数据成员const)是没有意义的.
此外,静态数据成员只不过是具有类访问控制(公共/私有/等)的类范围全局变量.因此,某些功能const对它们具有不同的访问权限是没有意义的,尤其是基于它们的签名.
cv-qualifiers影响功能的签名.所以你可以:
class A {
static int s_common;
public:
static void getCommon () const { };
static void getCommon () { };
};
Run Code Online (Sandbox Code Playgroud)
现在......你怎么称呼那个const?没有const对象可以调用它(好吧,你可以在一个const对象上调用它,但这不是重点).
我只是猜测,可能还有其他原因.:)
const在成员函数上使用cv-qualifier 的基本原理是:
指示this传递给成员函数的隐藏指针是不可变的,并且不能修改它.甲static成员函数不具有隐藏this参数,并且因此const对于static成员函数是无意义的.
但是如果允许的话,静态成员函数的"const"可能很容易与静态数据成员相关.
这不是const开始使用限定符的基本原理,这可以从你不能将cv-qualifiers应用于自由函数的事实中看出来.在cv-qualifiers过去和现在都只是针对this,其功能被调用的对象.