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)
编译器使用哪个版本?
它不含糊,因为它const是签名的一部分,可用于重载解析.因此,如果您operator[]在非const对象上使用它,它会选择过载,const因为这是最具体的一个.如果你在const对象上使用它,它会选择重载,const因为这是唯一适用的.