我有这段代码:
#include <iostream>
using namespace std;
class A
{
public:
int& operator[](int index)
{
//Do something and return
}
};
int main(void) {
A a;
a[5] =3;//here
return 0;
}
我想知道这个= 3去哪里,我知道5在函数中去索引,但是这里= 3;去,它不能激活operator =肯定,因为我没有对话c'tor。任何人都可以向我解释它是如何工作的,我很感激。
答案 0 :(得分:1)
首先考虑一个简单的程序
#include <iostream>
int main()
{
int x;
int &r = x;
r = 10;
std::cout << "x = " << x << std::endl;
}
此处= 10
转到x
,因为r
被声明为对x
的引用
现在考虑另一个简单的程序
#include <iostream>
struct A
{
int x;
int & operator []( int i ) { return x; }
};
int main()
{
A a;
int &r = a[0];
r = 10;
std::cout << "a.x = " << a.x << std::endl;
}
现在&#34; = 10&#34;转到a.x
因为operator []返回对a.x
的引用。
int & operator []( int i ) { return x; }
^^^^^ ^^^
当然你可以写
a[0] = 10;
效果将是相同的,因为在任何情况下a[0]
(您可以在此使用任何整数而不是0; 0仅用于展示)返回对a.x
的引用。
相对于你的代码片段= 3进入操作员调用
a.operator []( 5 )
指的是。
在我的示例中,它引用结构A的数据成员x。在您的示例中,它是未知的,因为您没有显示运算符的返回引用类型所引用的运算符的定义。