C++ 为什么boost::asio::ip::tcp::socket&;套接字()不能为常量
C++ 为什么boost::asio::ip::tcp::socket&;套接字()不能为常量,c++,sockets,boost,boost-asio,C++,Sockets,Boost,Boost Asio,boost::asio::ip::tcp::socket&socket()const正在返回类型为boost::asio::ip::tcp::socket的\u socket给我这个错误 error: invalid initialization of non-const reference of type ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service&l
boost::asio::ip::tcp::socket&socket()const
正在返回类型为boost::asio::ip::tcp::socket
的\u 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> > >’
错误:从“const boost::reference\u wrapper”类型的临时文件初始化“boost::asio::basic\u stream\u socket&”类型的非常量引用无效
socket()
函数只是一个getter,并没有改变这个对象的状态,所以如果我将它设置为const
,为什么会触发错误?,因为该函数正在返回一个对象的引用。调用const成员函数时,返回的引用也必须是const
boost::asio::ip::tcp::socket常量和socket()常量
但是,根据您希望对该套接字引用执行的操作,您可能必须返回一个非常量引用,在这种情况下,另一个选项是将getter函数声明为非常量,或者在类定义中声明socketmutable
mutable boost::asio::ip::tcp::socket socket
调用const成员函数时,返回的引用也必须是const
!!我认为函数不能改变对象的状态。从未听说过必须返回const ref
@DiproSen:如果返回的引用不是const
,您可以使用它调用被引用对象上的非const
函数,因此避免了常量的问题。但如果返回的引用不是常量,则可能会更改返回对象的状态,而不是该成员的此
对象的状态function@DiproSen:当成员函数标记为const
时,它也将对象的所有成员视为const
。这也会阻止您对这些成员调用非常量成员函数。它还阻止您初始化对这些字段之一的非常量引用。