我不明白为什么在这个 C++ 程序中
[0]
中的 [19]
和 (b.a_test)[0][12][19]
被忽略,而在下一行却没有。
有人可以向我解释一下为什么吗?
#include <iostream>
class A {
public:
A operator[](int i) {
std::cout << i << "\n";
return *this;
}
};
class B {
public:
A* a;
A get_a() {
return *a;
}
__declspec(property(get = get_a)) A a_test;;
B(A* a_) {
a = a_;
}
};
int main() {
B b = B(new A());
(b.a_test)[0][12][19]; // output 19 while it should oupout 0 12 19
(b.get_a())[0][12][19]; //output 0 12 19 as expected
delete b.a;
return 0;
}
我期待程序输出这个:
12
19
0
12
19
但是输出是:
19
0
12
19
使用指针的工作原理:
#include <iostream>
class A
{
public:
A operator[](int i) {
std::cout << i << "\n";
return *this;
}
};
class B
{
public:
A* a;
A* get_a () {
return a;
}
__declspec(property(get = get_a)) A* a_test;
B (A* a_) {
a = a_;
}
};
int main () {
B b = B (new A ());
(*b.a_test)[0][12][19];
delete b.a;
return 0;
}