“charfun[](intx)const”有什么作用?:C++语法错误

我正在关注在 C++ 中模拟 cpu 的视频。程序员用的如下,也是第一次遇到:

这是视频中的代码:

struct Mem
{
    Byte Data[MAX_MEM];

    Byte operator[]( u32 Offset ) // <-- I don't understand this syntax
    {
    }
}

我在自己的项目中是这样写的:

char data[1024*64];
char fun[] ( int x ) const  // <-- Is this right?
{
  return data[x];
}

我的问题是1#示例中的一行。他们能够编译,但我遇到了错误:

不允许不完整的类型;
不允许使用函数数组;
非成员函数上不允许使用类型限定符。

这种语法实际上有什么作用?有没有另一种写法?

回答

您的最小示例不太正确;他们在视频中使用的语法非常特殊,您已经更改了一些关键部分 - 他们将索引运算符重载为类的成员。正在发生的事情的一个愚蠢的最小示例如下:

struct X {
   char data[1024];
   char& operator[](int index) {
      return data[index];
   }
};

您以后可以在其中编写代码,例如

X x;
x[5] = 'a';

该代码段x[5]将调用您的用户定义作为参数operator[]传递5的位置。这里的重点是,本质上,类中函数的名称是operator[]- 这只是与 C++ 的运算符重载特性相关的一些特殊名称。有一些固定的其他运算符集可以通过这种方式定义 - 您还将看到operator()是要x(a,b,c,...)为用户定义类型的对象定义X还是operator+x+y定义。请注意,这operator是一个关键字 - 它的名称不能与其他名称互换。此外,对于索引运算符(和其他一些),此类函数可能仅在类内定义(尽管有些函数,例如可以在类operator+外定义)。

在这个问题上有一个关于重载的很好的一般参考。


以上是“charfun[](intx)const”有什么作用?:C++语法错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>