2017-06-14 49 views
1

引用說std::function::operator()const。這個常量適用於什麼?如果std::function是可調用對象的包裝,則此常量是否適用於此對象(也就是說它的operator()也應該是const?)。C++:什麼是std :: function constness的語義?

總體而言,std::function對於不同類型的目標(lambda,函數指針,對象,成員函數等)是什麼意思?

回答

0

這是一個錯誤。根據規範,由於從非const引用調用目標對象,因此實際上沒有什麼是const

未來版本的標準庫將從呼叫運營商刪除const。用戶將能夠專門請求const呼叫使用專業化,如std::function<return_type(arg_type) const>

查看標準提案P0045。 (披露:我是作者。)

+0

感謝您澄清'operator()'。你能回答問題的第二部分嗎?例如,當我通過const引用傳遞'std :: function'時,這個常量是什麼意思? –

+1

@DmitryJ目前,所有'const'語義都沒有意義,因爲調用操作符會拋出它(就像'const_cast'一樣)。一旦庫bug的問題得到解決,例如我的提議,那麼一個普通的'std :: function '甚至不會被'const'引用調用。 – Potatoswatter

+0

@Potatoswatter昨天當我不得不處理一個const std :: function並開始想知道如果調用操作符是const意味着,綁定對象/ member-func也必須是const時,我有完全相同的問題。答案是沒有必要,但我推論這是因爲常量只適用於std :: function的狀態,但如果綁定對象存儲爲成員變量,那麼我猜它所調用的成員func也必須是const ? – ForeverLearning

相關問題