为什么静态成员函数不能是常量?

时间:2015-03-15 00:22:40

标签: c++

我浏览了这个主题的现有主题,并且不相信这个解释。

我从那里得到的是:

当声明非静态成员函数const时,对此this指针施加限制。由于静态成员函数不涉及this指针,因此无法将它们声明为const

是吗?对我来说听起来不太有说服力。我的意思是,我不会质疑为什么会如此。我只是想了解原因。

2 个答案:

答案 0 :(得分:4)

允许const非静态成员函数修改本地,静态和全局变量;它不允许通过this指针(隐式或显式)修改其类的成员。因此,允许const静态成员函数修改局部,静态和全局变量,就像非成员函数一样。这会使const无意义。

如果你想编写一个根本不允许修改任何非局部变量的函数,你可以声明它constexpr,尽管这也会产生额外的限制。

答案 1 :(得分:1)

函数的const / non-const区分很重要的原因是有些上下文调用非const函数是不合法的。因此,区别可用于强制不变量。

例如,如果将非const引用传递给函数,如果您的类设计得当,则可以保证函数不能更改引用所引用的东西的值。这样可以避免复制。

此外,非const引用不能绑定到临时引用。这允许函数指示它们是通过引用返回值还是仅取值。如果您无意中忽略了返回的值,则会在编译时收到错误,因为意外创建了临时值。

这些都不适用于静态函数,因为没有上下文禁止您调用它们。因此静态函数不存在区分的整个基本原理。