在较大的代码库中,我遇到了这样的代码(see on godbolt):
struct Foo {};
struct Base {
Foo* a;
};
struct Bar : public Base {
static Foo *Bar::*mybar[];
};
Foo *Bar::Bar::*mybar[] = {
&Base::a
};
老实说,我感到困惑。这看起来像是使用非静态成员变量Foo
初始化Bar
中Base
指针的静态数组。没有物体怎么可能?
(免责声明:可以在实际有效的生产代码中找到-希望不依赖UB?)>
而且,如果删除类似here的限定名称查找,是否会有任何问题?我想重构代码并使其更具可读性。所有这些Bar::
似乎都是多余的,但是由于我对代码不太满意,所以我宁愿先理解其含义。
在更大的代码库中,我遇到了这样的代码(请参见godbolt):struct Foo {}; struct Base {Foo * a; }; struct Bar:public Base {static Foo * Bar :: * mybar []; }; Foo * Bar :: Bar :: * ...
与普通指针不同,类成员指针可以作为类的偏移量,它们在告诉您它们指向对象的哪个成员。因此,在您的代码中,mybar
是成员函数指针的数组。当你做