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

如何声明不可修改的C++成员函数指针?求C++11前实现方式

在C++11之前声明常量成员函数指针

要让你的成员函数指针本身成为常量(即不能被重新赋值),关键是把const放在正确的位置——也就是成员函数指针声明中*和变量名之间。

对于你的foo结构体:

struct foo { 
    void func1(); 
    void func2(); 
};

正确的常量成员函数指针声明应该是这样:

void (foo::* const bar)() = &foo::func1;

这样声明后,如果你尝试执行bar = &foo::func2;,编译器就会报错,阻止你修改bar的值,完全符合你的需求。

为什么要这么写?

成员函数指针的语法本身比较容易混淆,这里要区分两种const的作用:

  • void (foo::*)() const:这是指向const成员函数的指针,指针可以指向那些不会修改对象的成员函数,和你要的“指针本身不可修改”不是一回事。
  • void (foo::* const)():这才是常量成员函数指针,指针变量本身是const的,一旦完成初始化就不能再指向其他成员函数。

而C++11的const auto bar = &foo::func1;之所以能生效,是因为auto自动推导了成员函数指针的类型,再加上const修饰了变量本身,和上面手动写的声明效果完全一致。

内容的提问来源于stack exchange,提问作者Jonathan Mee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:15:18