c++ - 将 const 成员函数转换为非常量

标签 c++ casting constants

是否强制转换 C++ 中定义的成员函数指针的 const 性?以下代码是否有效?

struct T {
  void foo(int i) const { std::cout << i << std::endl;};
};

void (T::*f1)(int) const = &T::foo;
void (T::*f2)(int)       = reinterpret_cast<void (T::*)(int)>(f1);
T t;
(t.*f2)(1);

更新:

我需要这个的原因是我正在编写一个函数,它接受一个对象和一个指向该对象的成员函数指针。我需要一个 const 对象的版本(只接受 const 函数)和一个普通的。由于我不想要重复的代码,我的想法是将实际代码放在非 const 版本中并从 const 版本调用它,丢弃任何 const。

最佳答案

编译器吃掉它。 但是向后转换更有用。

再说一次,但最好不要使用它,const_cast 通常只是一个快速而肮脏的解决方案,只有在没有任何其他解决方案时才应用它。

更新答案

如果我对您的理解正确,您将使用一个对象和两个函数。第一个函数接受 const 对象和 const 成员函数,第二个 - 非常量对象和非常量成员函数。

根据给定的信息,您可以更改第二个函数以接受非常量对象和常量成员函数。并给他们一个非常量对象及其常量成员函数。

关于c++ - 将 const 成员函数转换为非常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914845/

相关文章:

c++ - 如何最有效地增加大型数组中指定范围内的值,然后找到最大值

swift - 如何在 swift 中将 self 转换为 UnsafeMutablePointer<Void> 类型

java - 如何将对象向上转换为 java.util.Map?

c++ - 添加 const 正确性

c++ - 使用tinyxml创建xmlns

c++ - 指向 char* 值的指针中的问题

java - 序列化——C++和Java的区别

从 char * 转换为 int 会失去精度

c - C 中的静态 const 结构

actionscript-3 - Actionscript 3.0 中的行号常量?