You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

强制转换成员函数指针时,如何选择const版本的重载?

获取const重载成员函数指针的方法

要获取const版本的foo成员函数指针,只需把const关键字放在成员函数指针类型的参数列表之后,对应的类型为void (Overloads::*)() const。

正确代码示例

修改你的main函数如下:

int main() {
    auto overloads = Overloads{};

    // 获取非const版本的foo指针
    auto foo_func = static_cast<void (Overloads::*)()>(&Overloads::foo);
    (overloads.*foo_func)();  // 输出foo

    // 获取const版本的foo指针
    auto const_foo_func = static_cast<void (Overloads::*)() const>(&Overloads::foo);
    (overloads.*const_foo_func)();  // 输出const foo

    // 也可使用const对象调用const版本函数指针
    const auto const_overloads = Overloads{};
    (const_overloads.*const_foo_func)();  // 同样输出const foo
}

语法位置的原因

在C++中,const放在成员函数参数列表后,是用来标记该函数为const成员函数——它承诺不会修改类的非mutable成员变量,调用时对象会被视为const类型。对应的成员函数指针类型里,const的位置必须和函数定义一致,编译器才能准确匹配到const版本的重载。

内容的提问来源于stack exchange,提问作者Георгий Гуминов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:43:11