operator []歧义解决方案

Kur*_*dey 1 c++ class operator-overloading ambiguity containment

诺布在这里.以下是我在书籍示例中遇到的类定义中的片段:

double& operator[](int i);
double operator[](int i) const;
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么这不模糊?编译项目的文件时,编译器不会给出任何错误.另外,在下面(想象AnyClass包含一个valarray<double>对象,例如我想直接访问它):

AnyClass test;
cout << test[2]
Run Code Online (Sandbox Code Playgroud)

编译器使用哪个版本?

sep*_*p2k 7

它不含糊,因为它const是签名的一部分,可用于重载解析.因此,如果您operator[]在非const对象上使用它,它会选择过载,const因为这是最具体的一个.如果你在const对象上使用它,它会选择重载,const因为这是唯一适用的.