gpt4 book ai didi

c++ - "char fun[](int x) const"是做什么的? : C++ Syntax Error

转载 作者:行者123 更新时间:2023-12-03 11:15:13 25 4
gpt4 key购买 nike

我是following along with a video emulating a cpu in C++ .程序员用了下面的,第一次遇到:

这是视频中的代码:

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# 行有关。他们能够编译,但我遇到了错误:

incomplete type is not allowed;
array of functions is not allowed;
a type qualifier is not allowed on a nonmember function.

这个语法实际上做了什么?有没有其他的写法?

最佳答案

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

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

以后可以在这里编写代码,例如

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

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

this 有一个很好的关于重载的一般引用问题。

关于c++ - "char fun[](int x) const"是做什么的? : C++ Syntax Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65547111/

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