下面是常見的錯誤的「作用域鎖」成語的例子:沒有本地變量被創建,所以鎖止裝置未生效。此代碼完美都編譯使用VC++ 2010和科莫C++在線:const正確性與臨時的實例
如果ScopedLock默認構造函數被註釋掉,那麼這兩個編譯器會給出一個錯誤:
error C2512: 'ScopedLock' : no appropriate default constructor available
(當ScopedLock
正確使用,即局部變量創建:ScopedLock guard(m_mutex);
,然後編譯失敗,如預期的那樣。聲明m_mutex
爲可變修復問題。)
我有兩個問題:
爲什麼
X::foo
編譯?看起來編譯器能夠以某種方式將const Mutex&
轉換爲Mutex&
。什麼樣的角色扮演
ScopedLock
默認的構造函數,所以編譯成功?
謝謝。
更新:我找到了答案。看來,ScopedLock(m_mutex);
語句創建ScopedLock
類型的局部變量m_mutex
。不是暫時的。這就是爲什麼ScopedLock::ScopedLock
默認構造函數是必需的。
感謝標準的答案和相關的引用。 – 2011-05-20 04:57:58