【发布时间】:2011-05-31 16:49:40
【问题描述】:
我有一个模块执行一些计算,并在计算期间与其他模块通信。由于计算模块不想依赖其他模块,所以它暴露了一个这样的接口(当然这是一个非常简化的版本):
class ICalculationManager
{
public:
double getValue (size_t index) = 0;
void setValue (size_t index, double value) = 0;
void notify (const char *message) = 0;
};
想要使用计算模块的应用程序需要编写自己的接口实现,并将其提供给计算工具,如下所示:
MyCalculationManager calcMgr;
CalculationTool calcTool (calcMgr);
calcTool.calculate();
我现在想知道在 ICalculationManager 接口的方法中添加“const”是否有意义。
getValue 方法只得到一些东西而不改变任何东西似乎是合乎逻辑的,所以我可以使这个 const。并且 setValue 可能会更改数据,因此不会是 const。 但是对于像 notify 这样更通用的方法我不能确定。
事实上,对于任何一种方法,我现在都无法确定该方法是否真正实现为 const 方法,如果我将接口方法设为 const,我将强制所有实现也为 const,即可能不想要。
在我看来,只有当你事先知道你的实现是什么以及它是否是 const 时,const 方法才有意义。这是真的吗?
把这种接口的方法做成const不是有意义吗?如果有意义,有什么好的规则来确定方法是否应该是 const ,即使我不知道实现是什么?
编辑:将参数从“char *”更改为“const char *”,因为这会导致不相关的答案。
【问题讨论】:
-
+1 引起了很多讨论:D