2012-06-13 38 views
0

boost::asio::ip::tcp::socket& socket() const正在恢復_socket這是boost::asio::ip::tcp::socket類型是給我這個錯誤爲什麼提高:: ASIO :: IP :: TCP ::插座和插座()不能是const

error: invalid initialization of non-const reference of type ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&’ from a temporary of type ‘const boost::reference_wrapper<const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >’ 

socket()功能僅getter和不改變這個對象的狀態,所以爲什麼它會引發錯誤const

回答

0

因爲該函數正在返回一個對象的引用。當調用const成員函數時,返回的引用也必須是const。

boost::asio::ip::tcp::socket const& socket() const

但是,這取決於你想要與插座參考做什麼,你可能必須返回一個非const引用,在這種情況下,另一種選擇是聲明getter函數爲非const或聲明插座mutable在類定義

mutable boost::asio::ip::tcp::socket socket_

+0

'當const成員函數被調用返回的引用也必須const' !!那麼我認爲這個函數不能改變對象的狀態。從來沒有聽說過它強制返回'const ref'。 –

+0

@DiproSen:如果返回的引用不是'const',則可以使用它在被引用對象上調用非''constst'函數,從而繞過它的所有'const'。 – DevSolar

+0

但如果返回的參考不是const的它可能改變的狀態'返回object'但不是'該成員函數 –