我在我的Raspberry Pi上編譯了Percona(MySQL變體),它有一個ARM處理器。解決const的無效轉換問題
我在編譯過程中遇到了一個報告過的問題,但沒人願意修復,因爲ARM是不受支持的平臺。
https://bugs.launchpad.net/percona-server/+bug/1002848
我已經設法解決這個問題,並編譯成功,但我的C++的知識有所欠缺,我不完全明白,如果我實際上已經打碎了什麼東西或沒有。
我已經閱讀了很多從const char *到char *的無效轉換,這是我得到這個解決方法的想法的地方。
錯誤如下:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(它實際上不是pthread_mutex_t
我的平臺上,但問題是相同的 - 實際類型輸給了無限的深淵是滾動緩衝區)
有問題的代碼是:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
我把它改爲:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
time_collector_lock被定義爲:
private:
my_atomic_rwlock_t time_collector_lock;
由於這應該是互斥的事實,我有我可能使這個非線程安全的感覺。或者這可以嗎?
有沒有更好的解決方案?
爲什麼不使用'const_cast'?你將使你的**意圖清晰**,並且你不會創建pthread_mutex_t的**副本... – 2012-07-16 09:57:16
如果你試圖將最初聲明爲const的一個對象const_cast,結果是UB – SingerOfTheFall 2012-07-16 10:01:36
@SingerOfTheFall **只有** const_cast的目的是去掉const。 – 2012-07-16 10:02:51