将 __declspec(property) 与运算符[]结合使用时出现问题

问题描述 投票:0回答:1

我不明白为什么在这个 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
c++ visual-studio properties operator-overloading
1个回答
0
投票

使用指针的工作原理:

#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;
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.