繁体   English   中英

为什么静态成员函数不能恒定?

[英]Why can't static member functions be constant?

我遍历了有关该主题的现有主题,对说明不满意。

我可以从那里得到的是:

当将非静态成员函数声明为constthis指针施加限制。 由于静态成员函数不包含this指针,因此不能将其声明为const

是吗 听起来不太令人信服。 我的意思是,我不怀疑为什么会这样。 我只想知道为什么。

允许使用const非静态成员函数来修改局部,静态和全局变量。 它只是不允许通过this指针(隐式或显式)修改其类的成员。 因此,就像非成员函数一样,将允许const静态成员函数修改局部,静态和全局变量。 这将使const失去意义。

如果您想编写一个根本不允许修改任何非局部变量的函数,则可以将其声明为constexpr ,尽管这也施加了其他限制。

函数的const / non-const区别很重要的原因是,在某些情况下调用非const函数是不合法的。 因此,该区别可用于强制不变式。

例如,如果将非常量引用传递给函数,并且您的类设计正确,那么可以保证该函数不能更改引用所引用的事物的值。 这使您可以避免复制。

同样,非常量引用不能绑定到临时目录。 这允许函数发出信号,告知它们是通过引用返回值还是仅获取值。 如果由于意外创建了临时项而无意中忽略了返回的值,则在编译时会出现错误。

所有这些都不适用于静态函数,因为在任何上下文中都不会禁止您调用它们。 因此,使用静态函数不存在区分的全部理由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM