c++ - operator[] 歧义消解

标签 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++ - operator[] 歧义消解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267397/

相关文章:

c++ - 使用非默认构造函数初始化成员类

c++ - 如何防止通过 'new' 运算符分配类? (我想确保我的 RAII 类始终分配在堆栈上。)

c++ - 重载 fstream << 运算符以保存 "any"种数据

c++ - 未解析的外部符号

c# - 为什么包含对 B 类型对象的引用的 A 类型引用变量不能访问 B 类的成员函数?

javascript - 将 JS 类转换为真正的类

C# 运算符重载、重写字符串?

c++ - 是否可以在 C++ 中转到更高级别的范围条件?

c++ - 在编译时获取未初始化的内存警告

c++ - getline 设置 failbit 和 eof