c++ - C++11 中会(并且应该)有套接字吗?

标签 c++ sockets c++11

新的 C++11 是否会包含任何套接字库?这样就可以做一些 std::socket-ish?

看到 std::thread 将如何添加,感觉好像也应该添加套接字。 C 风格的套接字很痛苦……感觉非常违反直觉。

无论如何:C++11 中是否会有 C++ 套接字(谷歌搜索但找不到答案)?如果没有,他们有计划添加这个吗?为什么(/为什么不)?

最佳答案

不,不是。至于不久的将来,C++ 标准委员会has created a study group that is developing a networking layer proposal .看起来他们正在采用自下而上的方法,从基本的套接字层开始,然后在此之上构建 HTTP/etc 支持。 They're looking to present the basic socket proposal at the October committee meeting.

至于为什么他们没有把它放到 C++11 中,那纯属推测。


如果你想听听我对此事的看法,正是出于这个原因。

如果您正在制作一个具有特定功能的程序,那么您可以出于以下两个原因之一选择库。一个原因是该库做了一些必要的事情来实现您的代码。另一个是因为它在实现代码方面做了一些帮助的事情。

一个特定程序的设计很难说,“我绝对必须使用 std::vector 来保存这个项目列表!”程序的设计 并不那么具体。如果你正在制作一个网络浏览器,浏览器的概念并不关心它是否将其标签保存在 std::vectorstd::list 或用户创建的对象。现在,一些设计可以强烈建议某些数据结构。但很少有设计明确表示像 std::list 这样的低级别的东西是绝对必要的。

std::list 几乎可以在任何程序中使用。 std::vectorstd::deque 等也可以。

但是,如果您正在制作一个网络浏览器,那么该设计中包含的就是网络。您必须要么使用网络库,要么自己编写网络层。这是理念的基本要求。

我为前一种类型使用的术语是“实用程序”库。

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

网络不是。仅当您的设计特别需要时才使用网络。您不会决定将网络转储到程序中。这不是实现细节;这是设计要求。

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

关于c++ - C++11 中会(并且应该)有套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638213/

相关文章:

c++ - 浮点错误是确定性的吗?

c# - Java 比 C# 有什么优势吗?

c++ - 使用通用函数指针 C++ 传递方法所需类型的参数

java - (Java, Socket) BufferedReader 阻塞线程,无法 .close()

在 -std=c++11 上编译时的 C++ "no match for operator >>"

C++ 11 获取 std::function 的指针

c++堆栈溢出未处理的异常与大数组

c - rawsocket sendto() 一些数据包被丢弃并且在网络中看不到

c++ - 如何摆脱 TCP 阻塞 connect() 调用?

c++ - g++ v 3.4.4-999 中的 unordered_map::emplace 错误