0

boost::asio::ip::tcp::socket& socket() const_socketタイプが返されていると、boost::asio::ip::tcp::socketこのエラーが発生します

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()関数はゲッターのみであり、このオブジェクトの状態を変更していないのに、作成するとエラーが発生するのはなぜconstですか?

4

1 に答える 1

0

関数がオブジェクトへの参照を返すためです。const メンバー関数が呼び出されると、返される参照も const でなければなりません。

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

ただし、そのソケット参照で何をしたいかによっては、非 const 参照を返す必要がある場合があります。その場合、ゲッター関数を非 const として宣言するかmutable、クラス定義でソケットを宣言するという別のオプションがあります。

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

于 2012-06-13T11:25:36.597 に答える