我找到了一个例子,在一个类定义中,定义了2个成员函数,但是具有相同的名称和相同数量的参数:
const MyClass& operator [] (int index) const;
MyClass& operator [] (int index);
我的问题是编译器将如何知道它需要使用哪个运算符定义?
答案 0 :(得分:1)
它们是不同的方法,主要是由于const
后缀。
返回值(单独)不能用于解析重载方法或运算符。
编辑1:
你的理解是不正确的。
第一个函数将引用返回给对象,该引用无法修改。它不会返回副本。该方法不允许修改类成员。
第二个函数将引用返回给对象,可以修改该对象。允许该方法修改类成员。
答案 1 :(得分:1)
如果尝试在常量函数中使用运算符,则将调用常量运算符,否则将调用非常量运算符。这是一个微妙的经常让人们吵闹,好像你只定义了非常数运算符,但试图在常量函数中使用它会导致错误。
答案 2 :(得分:1)
当两个方法仅在const
的声明中有所不同时,如果从也指定为const
的指针或引用调用const版本,则将选择const版本。否则你将获得非const版本。
这在vector
的实施中最常见。如果你有一个const向量,你不希望能够改变任何元素,所以返回一个元素的const引用。