Ube*_*ose 8 c++ boost warnings boost-asio
使用以下使用boost :: asio的代码.
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
class SocketTest
{
private:
boost::asio::io_service& mIOService;
tcp::acceptor mAcceptor; // Comment this line
public:
SocketTest(boost::asio::io_service& io_service)
: mIOService(io_service)
, mAcceptor(io_service, tcp::endpoint(tcp::v4(), 8080)) // Comment this line
{
}
};
Run Code Online (Sandbox Code Playgroud)
如果您对两个标记的行进行注释,则编译器(Visual Studio 2010)在/ W4上进行编译时会发出以下警告.
warning C4512: 'SocketTest' : assignment operator could not be generated
Run Code Online (Sandbox Code Playgroud)
是什么让这两条线如此特别?为什么它们的存在允许生成赋值运算符?
这种行为的原因是它tcp::acceptor不可复制(它继承自basic_io_object,其复制赋值运算符是私有的,因此不会隐式声明它自己的复制赋值运算符).拥有一个不可复制的成员可以避免生成隐式声明的复制赋值运算符,但不会引发警告,因为这被认为是预期的行为.
另一方面,如果你注释掉这两行,你的类只剩下一个引用成员; 这也使您的类不可复制,但会根据Visual Studio文档引发警告.我同意这也是预期的,但是编译器实现者决定给你一个警告以防万一.原因可能是使一个类明确地不可复制(例如情况basic_io_object)是一个明确的设计决定,但我只是在猜测.
| 归档时间: |
|
| 查看次数: |
6811 次 |
| 最近记录: |