gpt4 book ai didi

c++ - 指向基类成员的指针的推导类型

转载 作者:行者123 更新时间:2023-11-30 03:26:51 27 4
gpt4 key购买 nike

#include <type_traits>

struct BaseClass
{
int baseValue;
};

struct DerivedClass : public BaseClass
{
int derivedValue;
};

int main()
{
auto memDataPtr = &DerivedClass::baseValue;

static_assert(std::is_same<decltype(memDataPtr), int BaseClass::*>::value, "Huh?");
}

我试过的所有编译器都成功编译了这段代码,即静态断言不会触发。这意味着如果我获取从基类继承的成员的地址,则生成的指向成员的指针指的是成员来自的基类,即使我在指定成员时显式使用派生类名称也是如此。

我很想知道规范中哪里明确指出了这一点,以及这种行为背后的原因,因为它似乎有点违反直觉(至少对我天真的自己而言)。

最佳答案

参见 [expr.unary.op],它说

If the operand is a qualified-id naming a non-static or variant member m of some class C with type T, the result has type “pointer to member of class C of type T” and is a prvalue designating C::m.

它还给出了一个例子来展示这种行为:

struct A { int i; };
struct B : A { };
... &B::i ... // has type int A::*

关于c++ - 指向基类成员的指针的推导类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47947565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com