【发布时间】:2015-07-29 10:59:59
【问题描述】:
是否正在转换 C++ 中定义的成员函数指针的constness?以下代码是否有效?
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 是有原因的
-
@Gir 好吧,没那么容易。放弃对变量的 const-ness 基本上是为了增加可写性(即提高期望值),而放弃对这个方法的 const-ness 试图让函数不必给出“I不会改变内部状态”保证(即降低期望)。
-
@Gir 但这些不是变量。您似乎没有理解
const关键字在应用于函数时的含义。 -
但它不会改变函数的行为,你需要这个做什么??
-
@klm123:它不会改变任何东西。 const 是 c++ 程序的语法糖,除非您像“static const int i = 1;”一样使用它。这可能会被优化,除非你在某处写“&i”,否则不会。对于函数来说更是如此。您不能将任何内容传递给将被优化的函数,因此您可以公然抛弃并返回函数内部或外部的任何 const。