具有相同名称C ++的成员函数

时间:2014-07-09 20:20:20

标签: c++ function class

我找到了一个例子,在一个类定义中,定义了2个成员函数,但是具有相同的名称和相同数量的参数:

const MyClass& operator [] (int index) const;
MyClass& operator [] (int index);

我的问题是编译器将如何知道它需要使用哪个运算符定义?

3 个答案:

答案 0 :(得分:1)

它们是不同的方法,主要是由于const后缀。

返回值(单独)不能用于解析重载方法或运算符。

编辑1:
你的理解是不正确的。

第一个函数将引用返回给对象,该引用无法修改。它不会返回副本。该方法不允许修改类成员。

第二个函数将引用返回给对象,可以修改该对象。允许该方法修改类成员。

答案 1 :(得分:1)

如果尝试在常量函数中使用运算符,则将调用常量运算符,否则将调用非常量运算符。这是一个微妙的经常让人们吵闹,好像你只定义了非常数运算符,但试图在常量函数中使用它会导致错误。

答案 2 :(得分:1)

当两个方法仅在const的声明中有所不同时,如果从也指定为const的指针或引用调用const版本,则将选择const版本。否则你将获得非const版本。

这在vector的实施中最常见。如果你有一个const向量,你不希望能够改变任何元素,所以返回一个元素的const引用。