gpt4 book ai didi

左值和右值的 C++ 运算符重载 [ ]

转载 作者:搜寻专家 更新时间:2023-10-30 23:54:00 24 4
gpt4 key购买 nike

我创建了一个包含整数数组的数组类。从 main 函数中,我尝试使用 [ ] 获取 Array 中的数组元素,就像我们对 main 中声明的数组所做的那样。我重载了运算符 [ ],如下面的代码所示;第一个函数返回左值,第二个函数返回右值(未显示构造函数和其他成员函数。)

#include <iostream>
using namespace std;

class Array {
public:
int& operator[] (const int index)
{
return a[index];
}
int operator[] (const int index) const
{
return a[index];
}

private:
int* a;
}

但是,当我尝试从 main 调用这两个函数时,即使变量未用作左值,也只会访问第一个函数。如果一切都可以通过使用左值函数来处理,我看不出为右值创建一个单独的函数有什么意义。

下面的代码是我使用的主要函数(运算符<<被适当重载。):

#include "array.h"
#include <iostream>
using namespace std;

int main() {
Array array;
array[3] = 5; // lvalue function called
cout << array[3] << endl; // lvalue function called
array[4] = array[3] // lvalue function called for both
}

有什么方法可以调用右值函数吗?是否还需要为左值和右值定义函数?

最佳答案

第二个函数是一个const 成员函数,如果您有一个const 实例,它将被调用:

const Array array;
cout << array[3] << endl; // rvalue function called

调用这些“左值”和“右值”函数并不常见。如果需要,您可以定义 const 以返回 const 引用。

关于左值和右值的 C++ 运算符重载 [ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051502/

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