为什么boost :: asio :: ip :: tcp :: socket& socket()不能是const

时间:2012-06-13 11:08:54

标签: c++ sockets boost boost-asio

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()函数只是getter,并没有改变这个对象的状态,那么为什么在我const时它会触发错误?

1 个答案:

答案 0 :(得分:0)

因为该函数正在返回对象的引用。调用const成员函数时,返回的引用也必须是const。

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

但是,根据您对该套接字引用的要求,您可能必须返回非const引用,在这种情况下,另一个选项是将getter函数声明为非const或声明套接字{{1在类定义中

mutable