C++ 如何通过 operator[] 进行编写
C++ how writing through operator[] works
我有这个代码:
#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;
}
我想知道 this =3 去哪里,我知道 5 去函数中的索引,但是 this =3;去,它不能激活 operator= 肯定因为我没有对话 c'tor。任何人都可以向我解释它是如何工作的,我很感激。
首先考虑一个简单的程序
#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;
}
现在“=10”转到 a.x
因为运算符 [] return 引用了 a.x
。
int & operator []( int i ) { return x; }
^^^^^ ^^^
当然你可以只写
a[0] = 10;
效果是一样的,因为在任何情况下a[0]
(您可以在这里使用任何整数代替 0;0 仅用于说明)returns 引用 a.x
.
相对于您的代码片段 =3 转到操作员调用的内容
a.operator []( 5 )
指.
在我的示例中,它指的是结构 A 的数据成员 x。在您的示例中,它是未知的,因为您没有说明运算符是如何定义的,即 return 引用类型所引用的运算符运算符。
我有这个代码:
#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;
}
我想知道 this =3 去哪里,我知道 5 去函数中的索引,但是 this =3;去,它不能激活 operator= 肯定因为我没有对话 c'tor。任何人都可以向我解释它是如何工作的,我很感激。
首先考虑一个简单的程序
#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;
}
现在“=10”转到 a.x
因为运算符 [] return 引用了 a.x
。
int & operator []( int i ) { return x; }
^^^^^ ^^^
当然你可以只写
a[0] = 10;
效果是一样的,因为在任何情况下a[0]
(您可以在这里使用任何整数代替 0;0 仅用于说明)returns 引用 a.x
.
相对于您的代码片段 =3 转到操作员调用的内容
a.operator []( 5 )
指.
在我的示例中,它指的是结构 A 的数据成员 x。在您的示例中,它是未知的,因为您没有说明运算符是如何定义的,即 return 引用类型所引用的运算符运算符。