我将跟随一个视频,用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] 删除。
我来说两句