c++ - 编译器如何确定哪些成员函数发生变异?

标签 c++ compiler-construction overloading

对我的一篇帖子的评论让我感兴趣:

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/

相关文章:

c++ - Variadic Templates - 参数包扩展理解

c++ - 数组指针算术 - 合法和未定义的行为

C++ 标准和全局符号删除

javascript - 谷歌闭包编译器 - 双重编译

c# - 从字符串解析计算树

java方法重载: abnormal behaviour

python - 如何在Python中执行构造函数重载?

c++ - 字符串在 RC4 解密过程中被截断

c++ - 此代码是从 vector 中添加和删除项目的线程安全方式吗?

java - 为什么 Scala 编译器更喜欢将值为 null 的参数推断为 Array[Char] 而不是 Object?