#4行的C ++代码有什么作用?

时间:2017-05-22 06:37:17

标签: c++

class vector{
public:
    vector(int s);
    double& operator[](int i);
    int size();
private:
    double∗ elem;
    int sz;
};

第4行:double& operator [](int i);

这条线在C ++编程原理中意味着什么,我感到困惑在哪里&使用和[](int i)也很混乱。

3 个答案:

答案 0 :(得分:5)

它定义了运算符[],它返回对向量中第n个元素的double值的引用。
通过这种方式,您可以读取和写入特定元素 假设您有以下内容:

vector my_vector(1000);

使用操作double value = my_vector[3],您可以读取第4个元素的值 使用操作my_vector[6] = 6.7,您可以设置第7个元素的值。

答案 1 :(得分:2)

它允许您在矢量对象上使用[]参数。 它向您显示它接收一个int作为参数(double element = vector1[2]; ),并返回一个double,因此如下所示的行将是有效的:

vector1[2] = 4; // since the returned value is a reference

vector

其中vector1是TryRequest类的实例。

答案 2 :(得分:1)

double& operator[](int i);
  

此行在C ++中的含义

此行声明了operator[](也称为“数组下标运算符”)实现,该实现通常用于索引容器类型(例如std::vectorstd::map和其他)。想象一下,公共sequence[0]可以访问对序列的第一个元素的引用。

  

其中&使用

在C ++中,附加到类型的&字符表示“表示对类型Foo的引用的类型”。例如,int&int的引用,而double&是对double的引用。

现在,为什么要从operator[]返回引用?答案是:因为您可能想要编写这样的代码......

sequence[0] = 42;

...为此,您需要operator[]实现来返回左值。恰好是引用是左值!你为什么需要一个左值?一个简单的答案是“因为作业的左侧必须是左值”。在了解左值和左值时,我发现this article很有帮助。

  

和[](int i)也很混乱。

您解析此错误。以这种方式看待声明:

  1. double&
  2. operator[]
  3. (int i)
  4. 第一部分是返回类型,第二部分是你正在实现的函数的名称,第三部分是你的函数所用的参数。

    operator[]的实现应采用整数值(intunsignedsize_t等)作为参数(免责声明:不确定,找不到“你应该”参考这个)。这就是您的参数列表为(int)

    的原因

    进一步阅读:转到http://en.cppreference.com/w/cpp/language/operators并查找“数组下标运算符”。