c++ - [] C++中get和set操作的运算符重载

标签 c++ arrays reference operator-overloading

我正在上以下课:

class mem
{
private:
    char _memory[0x10000][9];

public: 
    const (&char)[9] operator [] (int addr);    
}

我的目标是能够像数组一样使用 mem 类,而稍后的实现会更复杂。所以,我应该可以

  • 像“mem[0x1234]”一样访问它以返回对 9 个字符数组的引用
  • 像'mem[0x1234] = "12345678\0";'一样写入它

这是我尝试过的:

#include "mem.h"

const (&char)[9] mem::operator [] (int addr)
{
    return &_memory[addr];
}

然而,它说该方法“必须有一个返回值”,我以为我已经定义为 (&char)[9],但是作为这个定义,我得到了错误消息“expected标识符”。

最佳答案

operator[] 是一个接受 int 的函数

operator[](int addr)

返回一个引用

& operator[](int addr)

长度为9的数组

(&operator[](int addr))[9]

const char

const char (&operator[](int addr))[9]

就是说,不要那样做。使用 typedef 来简化:

typedef const char (&ref9)[9];
ref9 operator[](int addr);

也就是说,也不要那样做。

std::array<std::array<char, 9>, 0x10000> _memory;
const std::array<char, 9>& operator[](int addr);

关于c++ - [] C++中get和set操作的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33936685/

相关文章:

c++ - lambda 中引用捕获对象的类型

c++ - 将结构的每个成员写入文件和将结构对象直接写入 C++ 文件之间有什么区别吗?

arrays - 将零移动到数组编程练习末尾的性能

Javascript [jQuery] 按键和值过滤数组

Javascript 纸牌游戏 - 随机选择后替换数组项

c++ - 如何重新定位引用 C++

c# - 引用项目在编译时获取 "lost"

python - 如何使用 SWIG 为 C++ 模板类创建调度包装类

c++ - GlBufferDataARB 给我内存问题

c++ - 如何初始化 constexpr 引用