【发布时间】:2020-09-21 05:10:11
【问题描述】:
在更大的代码库中,我遇到过这样的代码 (see on godbolt):
struct Foo {};
struct Base {
Foo* a;
};
struct Bar : public Base {
static Foo* Bar::*mybar[];
};
Foo* Bar::Bar::*mybar[] = {
&Base::a
};
说实话,我很困惑。这看起来像是在使用Base 的非静态成员变量初始化Bar 中的Foo 指针的静态数组。没有对象怎么可能?
(免责声明:这是在实际工作的生产代码中发现的 - 希望不依赖于 UB?)
另外,如果我删除像here 这样的限定名称查找有什么问题吗?我想重构代码并使其更具可读性。所有这些Bar::s 似乎都是多余的,但由于我对代码感觉不太舒服,我宁愿先了解其中的含义。
【问题讨论】:
-
你把
&Base::a成员指针和Base b; &b.a;对象指针混淆了吗? -
生产代码真的是
Foo *Bar::Bar::*mybar,还是Foo *Bar::* Bar::mybar? -
@1201ProgramAlarm 感谢您的注意:确实这是一个错字 - 我已经更新了我的问题,包括上帝螺栓链接。
标签: c++ class c++11 inheritance static