我浏览了这个主题的现有主题,并且不相信这个解释。
我从那里得到的是:
当声明非静态成员函数const
时,对此this
指针施加限制。由于静态成员函数不涉及this
指针,因此无法将它们声明为const
。
答案 0 :(得分:4)
允许const
非静态成员函数修改本地,静态和全局变量;它不允许通过this
指针(隐式或显式)修改其类的成员。因此,允许const
静态成员函数修改局部,静态和全局变量,就像非成员函数一样。这会使const
无意义。
如果你想编写一个根本不允许修改任何非局部变量的函数,你可以声明它constexpr
,尽管这也会产生额外的限制。
答案 1 :(得分:1)
函数的const / non-const区分很重要的原因是有些上下文调用非const函数是不合法的。因此,区别可用于强制不变量。
例如,如果将非const引用传递给函数,如果您的类设计得当,则可以保证函数不能更改引用所引用的东西的值。这样可以避免复制。
此外,非const引用不能绑定到临时引用。这允许函数指示它们是通过引用返回值还是仅取值。如果您无意中忽略了返回的值,则会在编译时收到错误,因为意外创建了临时值。
这些都不适用于静态函数,因为没有上下文禁止您调用它们。因此静态函数不存在区分的整个基本原理。