指向成员函数的指针可以直接与reinterpret_cast一起使用吗?

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

指向成员函数的指针不是常规指针。 但指向成员函数指针的指针却可以。

struct X {
    void func() {}
};

int main() {
    auto p1 = &X::func;
    auto p2 = &p1;

    // reinterpret_cast<int *>(p1); error!
    reinterpret_cast<int *>(p2);
}

在上面的代码中,指向成员函数的指针不能直接与

reinterpret_cast
一起使用 但指向成员函数指针的指针却可以。 想知道cppreference或draft在哪里描述了这种情况?

c++ pointers pointer-to-member
1个回答
0
投票

[expr.reinterpret.cast]中的C++标准不允许任何类型的狂野reinterpret_cast,而是允许很长但限制性的情况列表。 对于指向成员的指针,规则是:

“指向 T1 类型 X 成员的指针”类型的纯右值可以显式转换为不同类型的纯右值 如果 T1 和 T2 都是函数类型或都是对象类型,则键入“指向 T2 类型的 Y 成员的指针”。

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