c++ - 运算符[]歧义解析

原文 标签 c++ class operator-overloading ambiguity containment

菜鸟在这里。以下是我在一个图书示例中遇到的类定义的片段:

double& operator[](int i);
double operator[](int i) const;

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

编译器使用哪个版本?

最佳答案

它不是模棱两可的,因为const是签名的一部分,可用于重载解析。因此,如果在非const对象上使用operator[],它将选择没有const的重载,因为这是最具体的一个。而且,如果在const对象上使用它,它将选择const来重载,因为这是唯一适用的重载。

相关文章:

c++ - 免费图书馆失败

python - 用Python方式检查参数类型

python - Python继承的基类变量

c# - 在nullable和基本类型之间实现运算符-我应该吗?

c++ - 添加模板参数时,超载分辨率会产生歧义调用

c++ - .inl文件在C++中的意义

java - Android-如何为“this”声明变量?

c++ - 加号运算符的C++重载

c++ - C++子类-重用重载运算符?

python - Caffe的GPU利用率在进行正向推理时还不够用,有什么想法吗?