• 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 问题反馈可发送邮件到stubbornhuang@qq.com

C++ – Asio和Boost.Asio的区别

C++ 发布于2023-06-26 阅读 3,512次 0次评论 0次点赞 本文共1723个字,阅读需要5分钟。

在编译C++一些网络库时,比如Websocket++、Crow等C++ web框架都是基于Asio进行开发的,并且都支持两种Asio。如果定义了ASIO_STANDALONE则会使用Asio,如果未定义则会使用Boost.Asio,那么这两者有什么区别呢?

Asio官网:http://think-async.com/Asio

Boost官网:https://www.boost.org/

在Asio的官网对Asio和Boost.Asio这两个的区别进行了详细的阐述,主要的差异如下。

Asio有两种变体,Asio(非Boost)和Boost.Asio,两者的差异概述如下。

1 源代码有什么区别?

  • Asio主要位于命名空间asio::中,而Boost.Asio则位于boost::asio::中;
  • Asio的主要头文件为asop.hpp,而Boost.Asio对应的头文件为boost/asio.hpp,其他头文件也是类似的变动;
  • Asio使用的宏或者定义宏都以ASIO_开头,而Boost.Asio则以BOOST_ASIO_开头;
  • Asio包含一个用于启动线程的类asio::thread,而Boost.Asio则不包含这个类,避免与Boost.Thread产生重叠和冲突;
  • Boost.Asio 始终使用 Boost.System 库来提供对错误代码 (boost::system::error_codeboost::system::system_error) 的支持。对于 C++11 及更高版本,Asio 使用 编译器附带的std::error_codestd::system_error,Asio 在其自己的命名空间中为这些名称添加别名(asio::error_codeasio::system_error),并且当面向 C++03 时,提供这些类的最小实现。如果以 C++03 为目标很重要,那么值得注意的是,这些类的 Boost.System 版本目前比这个最小实现支持更好的用户定义错误代码可扩展性。
  • 使用Asio只包含头文件即可,不需要链接任何Boost库,当使用C++11版本的编译器,比如支持C++11的gcc、clang或者MSVC时可以考虑使用Asio而不依赖Boost库;Boost.Asio 始终要求您使用 Boost.System 库,如果您想使用boost::thread. 这可能需要链接这些库,但值得注意的是,最新版本的 Boost 允许您在仅标头模式下使用 Boost.System。

2 从哪里下载Asio和Boost.Asio?

可以从SourceForge下载Asio:https://sourceforge.net/projects/asio/files/asio/

Boost.Asio包含在Boost1.35以及更高版本中,Boost可以从Github下载:https://github.com/boostorg/boost,也可以从Boost官网下载:https://www.boost.org/users/history/

3 源代码仓库在哪里?

Asio:https://github.com/chriskohlhoff/asio/

Boost.Asio:https://github.com/boostorg/asio/

4 既然Boost.Asio包含在了Boost中,Asio会停止维护吗?

不会。有一些项目使用 Asio,它们将继续受到支持。

5 我应该使用Asio还是Boost.Asio?

  • 如果你更喜欢仅包含头文件,那么建议使用Asio而不是Boost.Asio
  • 如果你必须使用Boost 1.35之前的版本,那么不包括Boost.Asio,在这种情况下建议使用Asio而不是Boost.Asio
  • Asio和Boost.Asio软件包的新版本更新会比Boost更加频繁和快速,如果你想使用最新版本,那么建议使用Asio而不是Boost.Asio

6 Asio和Boost.Asio可以在同一个程序中共存吗?

可以。

由于它们使用不同的命名空间,因此不应该发生冲突,尽管显然类型本身是不可互换的。(如果您想知道为什么要这样做,请考虑程序正在使用也在内部使用 Asio 的第三方库的情况。)

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:C++ – Asio和Boost.Asio的区别

原文链接:https://www.stubbornhuang.com/2696/

发布于:2023年06月26日 17:51:15

修改于:2023年06月26日 17:51:15

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
C++ - 想用C++写服务器?C/C++ web服务第三方库、框架整理
C++
下一篇
C++ - Web服务器框架Crow开发环境配置教程
C++
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号