菜鸟在这里。以下是我在书中示例中遇到的类定义的片段:
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/