gpt4 book ai didi

c++ - Const 成员函数,当操作有明显的副作用时

转载 作者:太空狗 更新时间:2023-10-29 23:25:45 24 4
gpt4 key购买 nike

假设我有一个类“Window”,其成员函数“show”使底层窗口在屏幕上可见。

因为我正在调用一个底层的 Windows API 来实现这一点,所以我没有以任何方式改变我的“Window”对象的状态,但显然我的窗口状态有一个很大的、明显的变化是由于调用这个(一个出现在屏幕上并能够与用户交互的窗口)

所以我应该将我的函数声明为 -

void Window::show() const;

因为就 Window 对象而言,此函数不会更改任何状态,因此可以在“const Window”对象上调用。但不知何故,这似乎不对,因为在某种意义上清楚地调用该函数会改变对象的状态。

最佳答案

您可能正在纠结的是 C++ 没有纯度的概念,即函数是否有副作用。 const 成员函数只 promise 不会修改对象本身的状态。

然而,一些对象在逻辑上包含比实例实际包含的状态更多的状态。当对象的角色是与另一个库(尤其是 GUI 库)管理的状态交互时,这种情况经常出现。

因此,虽然show() 可以顺便 标记为const,但逻辑上 应该是。如果它确实是 const,那么您会期望像 is_visible() 这样的函数在调用 show()< 之前和之后返回相同的值,显然情况并非如此。

换句话说,const 函数是那些您可以通过其公共(public)接口(interface)观察 的对象的任何改变。这就是背后的原因,例如,将一些成员函数标记为 const 但使用 mutable 成员进行内部簿记。

关于c++ - Const 成员函数,当操作有明显的副作用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9807876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com