是否鑄造了C++中定義的成員函數指針的const
?下面的有效代碼是?將const成員函數強制轉換爲非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變量是const的原因 – Gir 2012-08-11 12:56:40
@Gir好吧,不是那麼容易。在一個變量上拋出const_ness基本上試圖_add writability_(即提高期望值),同時在這個方法上拋出const_ness試圖使函數免於給出「我不會改變內部狀態」的保證。較低的期望)。 – 2012-08-11 13:03:23
@Gir但這些不是變量。您似乎並沒有理解'const'關鍵字在應用於函數時的含義。 – 2012-08-11 13:03:45