gpt4 book ai didi

c++ - 两个相同的重载运算符 [] 一个返回引用

转载 作者:行者123 更新时间:2023-11-28 04:05:22 25 4
gpt4 key购买 nike

我可以在同一个类中有两个重载的 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

在这些情况下,编译器可以使用参数的constness来区分调用哪个函数。 因为没有const的转换,我们只能将 const 对象(或指向 const 的指针)传递给带有常量参数。因为存在到 const 的转换,所以我们可以调用在非常量对象或指向非常量的指针上运行。然而,当我们传递一个 非常量对象或指向非常量的指针。来自 Primer 的示例。

关于c++ - 两个相同的重载运算符 [] 一个返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com