C++ 11中是否会(并且应该)有套接字?

Tou*_*zen 62 c++ sockets c++11

新的C++ 11是否包含任何套接字库?那么一个人可以做点什么 - 什么std::socket

看看std::thread将如何添加,感觉好像应该添加套接字.C风格的插座很痛苦...他们觉得非常反直觉.

无论如何:C++ 11中是否会有C++套接字(用Google搜索但无法找到答案)?如果没有,他们是否计划添加此项?为什么(/为什么不呢?)

Nic*_*las 53

不它不是.至于不久的将来,C++标准委员会已经创建了一个研究小组,正在开发一个网络层提案.它看起来像是采用自下而上的方法,从基本套接字层开始,然后在此基础上构建HTTP/etc支持.他们希望在10月份的委员会会议上提出基本的插座提案.

至于为什么他们没有把它放到C++ 11中,那纯粹是推测性的.


如果你想就此事发表意见,那就是出于这个原因.

如果您正在制作一个可以执行某项操作的程序,它具有特定的功能,那么您可以选择库,原因有两个.一个原因是因为该库执行了实现代码所必需的操作.另一个原因是它通常有助于实现代码.

特定程序的设计很难说"我绝对必须使用a std::vector来保存这些项目列表!" 程序的设计并不是那么具体.如果你正在做一个网页浏览器,如果它保持其在标签浏览器的想法并不关心std::vector,std::list或者用户创建的对象.现在,一些设计可以强烈建议某些数据结构.但很少有设计明确表示像a这样的低级别事物std::list是完全必要的.

std::list几乎可用于任何程序.正如std::vector,std::deque等等.

但是,如果您正在制作网络浏览器,那么在该设计中装瓶就是网络.您必须自己使用网络库或编写网络层.这是这个想法的基本要求.

我用于前一种类型的术语,对于可用于任何东西的库,是"实用程序"库.

线程是一个实用程序库.设计可能会鼓励线程通过响应用户的需求,但有一些方法可以在没有抢占式多线程的情况下做出响应.因此,在大多数情况下,线程是一种实现选择.因此,线程是一种实用工具.

网络不是.如果您的设计专门要求,您只能使用网络.您决定不将网络转储到程序中.它不是一个实现细节; 这是一个设计要求.

我认为标准的C/C++库应该只实现实用程序.这也是我反对其他重量级思想如XML解析器等的原因.其他库拥有这些东西并没有错,但对于C和C++,这些都不是好的选择.

  • 很好的答案,虽然我不同意你的看法.看作C++基本上是带有类的C,我认为它应该包括C提供的一些东西但是采用OOP格式.特别是像套接字一样有用的东西.因为非OOP套接字确实非常痛苦. (25认同)
  • 将事物排除在std之外做出哲学上的理由是完全正确的,但实用的现实是C++(现在是C++ 0x)与C#.NET,Java,Python和其他人相比继续受到影响.没有更大的现成解决方案来解决开发人员通常在其应用程序中解决的问题.根据Java SE的默认范围,开发人员可以获得巨大的提升. (20认同)
  • 一旦功能在语言标准库中,那么它的语言实现者就有责任提供它.因此,无论该语言的标准如何出现,都将是标准库规范.而第三方图书馆人员可能无法将其各自的库移植到该语言出现的所有平台上.经过数十年的行业经验,有一个很好的基础,有利于整合到标准库.Java,.NET,Python在很大程度上为他们的开发者提供了支持,因为他们的标准类库可以利用多少. (9认同)
  • @Touzen:从什么时候开始,C标准库带有套接字?甚至C1x也不会在标准库中支持它们. (5认同)
  • @RogerV:为什么解决方案必须成为标准库的一部分才能"现成"?Boost,LibXML2等以什么方式不属于C++编程的"架子"?外出并抓住图书馆完成特定任务有什么问题?所述库将由_experts_在这些领域设计和编写,而不是业余爱好者.我根本不明白某些人的这种明显的信念,如果它没有与编译器捆绑在一起,它就不存在,或者它在某种程度上不那么重要.我更喜欢扩展我的架子,让标准库用于通用实用程序. (5认同)
  • 那么Boost呢?它由c ++标准委员会的成员设计和实现,可能会被合并到std(而不是boost :: asio,std :: asio)中.boost库不仅包含实用功能,还实现了Java等其他语言的核心功能.我非常希望提升成为c ++的一部分. (2认同)
  • 对不起,但在这个时代,我说网络是根本的.是的,您可以使用库,但基本包中应包含基本内容.现在我认为如果你说"渲染引擎"或"脚本引擎"而不是网络,那么浏览器引用会更加贴切.我不认为我在过去的15年中编写的软件不需要某种程度的网络.甚至像"检查更新"这样简单.就个人而言,我认为C++需要的一件事是对套接字的第一级支持,然后才能对大多数程序员真正有意义. (2认同)
  • 基本联网是基本I / O的一部分,应在不提供库的情况下提供。我认为放弃套接字就像放弃对文件进行操作的能力。另外,它是特定于系统的,而XML解析器通常不依赖于基础平台。 (2认同)

小智 11

我认为应该这样,因为很多其他流行语言都支持套接字操作作为语言的一部分(它们不会强迫用户使用任何特定于操作系统的API).如果我们已经有文件流来读/写本地文件,我不明白为什么我们不能有一些使用套接字传输数据的方法.