[英]Why can't static member functions be constant?
我遍历了有关该主题的现有主题,对说明不满意。
我可以从那里得到的是:
当将非静态成员函数声明为const
, this
指针施加限制。 由于静态成员函数不包含this
指针,因此不能将其声明为const
。
是吗 听起来不太令人信服。 我的意思是,我不怀疑为什么会这样。 我只想知道为什么。
允许使用const
非静态成员函数来修改局部,静态和全局变量。 它只是不允许通过this
指针(隐式或显式)修改其类的成员。 因此,就像非成员函数一样,将允许const
静态成员函数修改局部,静态和全局变量。 这将使const
失去意义。
如果您想编写一个根本不允许修改任何非局部变量的函数,则可以将其声明为constexpr
,尽管这也施加了其他限制。
函数的const / non-const区别很重要的原因是,在某些情况下调用非const函数是不合法的。 因此,该区别可用于强制不变式。
例如,如果将非常量引用传递给函数,并且您的类设计正确,那么可以保证该函数不能更改引用所引用的事物的值。 这使您可以避免复制。
同样,非常量引用不能绑定到临时目录。 这允许函数发出信号,告知它们是通过引用返回值还是仅获取值。 如果由于意外创建了临时项而无意中忽略了返回的值,则在编译时会出现错误。
所有这些都不适用于静态函数,因为在任何上下文中都不会禁止您调用它们。 因此,使用静态函数不存在区分的全部理由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.