分类目录归档:C++

Cifer

四月 29, 2018

关于模板

一定要合理使用模板, 一定要优先保证可读性…

关于指针

个人觉得, 能少用指针就少用, 优先级如下:

引用 > 智能指针 > 指针

关于 const

引入 const 有意义吗? 变量是否应该改变应该由代码确保, 而不需要编译器确保. 相比与 const 带来的安全性, 它带来了更多的麻烦:

  1. const 类型的变量不能传入接受非 const 类型参数的函数, 这要求我们定义函数时参数类型最好都定义成 const 的. (c++ primer 5th, p192)

Cifer

四月 27, 2018

acceptor 一般使用方法:

using boost::asio::ip::tcp;

boost::asio::io_context     io_context;
boost::system::error_code   ec;

tcp::acceptor   acceptor(io_context)
tcp::socket     socket(io_context);
tcp::endpoint   ep_listen(tcp::v4(), 13000);
tcp::endpoint   ep_peer;

acceptor.open(ep.protocol(), ec);
acceptor.bind(ep, ec);
acceptor.listen(5, ec);
acceptor.accept(socket, ep_peer, ec);

...

这其实是有些繁琐的, 实际上 acceptor 的构造函数还有这个:

basic_socket_acceptor(
    boost::asio::io_context & io_context,
    const endpoint_type & endpoint,
    bool reuse_addr = true);

这里我们可以传入一个 endpoint 作为第二个参数, 提供了这个 endpoint 参数的话,
acceptor 会同时帮我们做 open, bind, listen 三件事,
所以上述代码可以写成如下这么短:

using boost::asio::ip::tcp;

boost::asio::io_context     io_context;
boost::system::error_code   ec;

tcp::endpoint   ep;
tcp::acceptor   acceptor(io_context, tcp::endpoint(tcp::v4(), 13000))
tcp::socket     socket(io_context);

acceptor.accept(socket, ep, ec);

...