对我的一篇帖子的评论让我感兴趣:
Me too. I also give accessors/mutators the same name.
我对此感到疑惑,因为我一直使用 setBar(int bar)
而不是名称相同的修改器。我想知道:编译器是否可以根据 const 标识符确定在运行时会发生什么变化,或者它是否可以使用相同的函数名称,因为它有一个参数?
这样编译好吗:
class Foo
{
int bar_;
public:
int bar() { return bar_; }
void bar(int bar) { bar_ = bar; }
}
或者我是否必须这样做(我意识到无论如何我都应该这样做,只是和我一起做这件事):
int bar() const { return bar_; }
我不知道哪个是哪个。 Const 正确性很重要,所以我想我希望编译器反对重载,因为一个会变异,一个不会。
为什么会这样?
最佳答案
编译器首先查看的是您传递给函数的参数的数量和类型。这解决了 bar
上的过载问题在它甚至需要查看 const
之前-性。
如果标记bar()
失败作为const
, 编译器会在你第一次尝试调用 bar()
时通知你在 const
上对象的实例。
关于c++ - 编译器如何确定哪些成员函数发生变异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230677/