“ char fun [](int x)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+可以在类外定义)。

关于问题的重载有很好的一般参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++ default-int 中的语法错误

来自分类Dev

int(x)是做什么的?

来自分类Dev

int(x)是做什么的?

来自分类Dev

为什么'int x = +“ foo”;' 类型错误而不是语法错误?

来自分类Dev

C ++语法错误

来自分类Dev

C ++语法错误

来自分类Dev

DXL脚本使用char c = str [i]产生语法错误

来自分类Dev

发现语法错误int预期; C ICC12编译器

来自分类Dev

.split()的int列表上的语法错误

来自分类Dev

INT 处或附近的 PostgreSQL 语法错误

来自分类Dev

C ++向量语法错误

来自分类Dev

语法错误'('-C#

来自分类Dev

C语言的语法错误

来自分类Dev

逻辑或语法错误?C ++

来自分类Dev

C#语法错误

来自分类Dev

C ++-错误C2664:'int scanf(const char *,...)':无法将参数1从'int'转换为'const char *'

来自分类Dev

错误:C2059:语法错误:'{'

来自分类Dev

C中的词法错误与语法错误

来自分类Dev

C中的词法错误与语法错误

来自分类Dev

'char'语法错误前的预期标识符或'('

来自分类Dev

javascript 语法错误 windows 主机 line 1 char 1

来自分类Dev

SML:语法错误:用VAL替换FUN

来自分类Dev

C++ char* 与 int*

来自分类Dev

木偶:“ $ x.each ...”的语法错误

来自分类Dev

语法错误-while(3 <x <10)

来自分类Dev

该行中的语法错误是什么

来自分类Dev

为什么<!-不引发语法错误?

来自分类Dev

为什么“ keys ::”不是语法错误?

来自分类Dev

语法错误(-201)为什么?