Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么boost::asio::ip::tcp::socket&;套接字()不能为常量_C++_Sockets_Boost_Boost Asio - Fatal编程技术网

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函数声明为非常量,或者在类定义中声明socket
mutable


mutable boost::asio::ip::tcp::socket socket
调用const成员函数时,返回的引用也必须是const
!!我认为函数不能改变对象的状态。从未听说过必须返回
const ref
@DiproSen:如果返回的引用不是
const
,您可以使用它调用被引用对象上的非
const
函数,因此避免了
常量的问题。但如果返回的引用不是常量,则可能会更改
返回对象的状态,而不是该成员的
对象的状态function@DiproSen:当成员函数标记为
const
时,它也将对象的所有成员视为
const
。这也会阻止您对这些成员调用非常量成员函数。它还阻止您初始化对这些字段之一的非常量引用。