两个相同的重载运算符[]一个返回引用
Two same overloaded operator [] one returning reference
在同一个类中可以有两个像这样的重载operator[]
吗?
我很困惑当我使用operator[]
时使用了哪个定义,int
不是模棱两可吗?他们不是有相同的签名吗?
template <class T, int n>
class ArrayTP
{
private:
T ar[n];
public:
ArrayTP() {};
virtual T & operator[](int i);
virtual T operator[](int i) const;
};
此类包含这些重载运算符的声明。不过,我的问题并没有包括定义。
重载运算符的工作原理与普通重载函数没有什么不同。只是它们是特殊的功能。所以我给你们举一个函数的一般例子,这个例子适用于任何类型的函数。
您必须知道,顶级const对可以传递给函数的对象。具有顶级常量的参数是与没有顶级常量的无法区分:
Record lookup(Phone);
Record lookup(const Phone); // redeclares Record lookup(Phone)
Record lookup(Phone*);
Record lookup(Phone* const); // redeclares Record lookup(Phone*)
在这些声明中,第二个声明声明的函数与第一个声明的函数相同。另一方面,我们可以根据参数是否为引用来重载(或指针(指向给定类型的常量或非常量版本;这样的常量是低级别。
// functions taking const and nonconst references or pointers have different parameters
// declarations for four independent, overloaded functions
Record lookup(Account&); // function that takes a reference to Account
Record lookup(const Account&); // new function that takes a constbreference.
Record lookup(Account*); // new function, takes a pointer to Account
Record lookup(const Account*); // new function, takes a pointer to const
在这些情况下,编译器可以使用参数的常量来区分调用哪个函数因为没有从const转换,我们只能将const对象(或指向const的指针(传递给具有const参数。因为存在到const的转换,所以我们可以调用函数或指向非约束的指针。但是,当我们传递nonconst对象或指向nonconst的指针。底漆示例。
相关文章:
- 寿命延长从函数返回引用
- 了解C++如何返回引用并绑定到引用
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 从类返回引用向量
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 混淆C++从函数返回引用
- 两个相同的重载运算符[]一个返回引用
- 为什么向量的.at()成员函数返回引用而不是迭代器
- C++使用和返回引用
- 返回 T 引用的 Const 函子禁止赋值
- 返回引用是否也会延长其生存期?
- 如何返回引用,然后递增迭代器
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 在 vector::at 返回引用后进行更改
- 为什么PyImport_ImportModule返回引用计数为 3 而不是 1 的 PyObject*
- 超出返回引用的单一实例生存期
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- C++ 运算符 += 重载返回引用
- 如何声明接受转发引用并返回引用或副本的函数模板