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