是否可以使用“std”命名空间来限定 C 函数?

发布于 2025-01-02 19:22:37 字数 190 浏览 0 评论 0原文

当我使用从 C 继承的函数时,例如 中的函数,我是否应该将它们限定为标准命名空间 的一部分std::log,或者我应该保留在 C 范围内并将它们用作全局函数吗? size_t 怎么样?

When I use functions inherited from C, like the ones in <cmath> or <cstdlib>, should I qualify them as being part of the standard namespace std::log, or should I remain in the C-scope and use them as global functions? What about size_t?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

完美的未来在梦里 2025-01-09 19:22:37

如果您使用例如

不,您不应该。

未指定它们是否在任何特定实现的命名空间 std 中可用:

[C++11: D.5/2]: 每个 C 头文件(每个头文件都有一个 name.h 形式的名称)的行为就像通过相应的 cname 标头放置在标准库命名空间中的每个名称都放置在全局命名空间范围内。 未指定这些名称是否首先在命名空间 std 的命名空间作用域 (3.3.6) 内声明或定义,然后通过显式的 using-declarations 注入到全局命名空间作用域中 (7.3.3)。

但是,您不应该使用此标头:

[C++11: C.3.1/1]: 为了与标准 C 库兼容,C++ 标准库提供了 18 个 C 头文件 (D.5),但是 它们的使用在 C++ 中已被弃用


如果您使用例如 是的

,您应该这样做。

未指定它们是否在任何特定实现的全局命名空间中可用:

[C++11: 17.6.1.2/4]: 除第 18 条至第 30 条和附录 D 中另有说明外,每个标头 cname 的内容应为与相应标头 name.h 相同,如 C 标准库 (1.2) 或 C Unicode TR 中所指定(视情况而定),就像通过包含一样。然而,在 C++ 标准库中,声明(除了在 C 中定义为宏的名称)位于命名空间 std 的命名空间范围 (3.3.6) 内。 未指定这些名称是否首先在全局命名空间范围内声明,然后通过显式using-declarations注入命名空间std(7.3.3)。< /strong>


If you use e.g. <math.h>

No, you shouldn't.

It is unspecified whether they are available in the namespace std on any particular implementation:

[C++11: D.5/2]: Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. It is unspecified whether these names are first declared or defined within namespace scope (3.3.6) of the namespace std and are then injected into the global namespace scope by explicit using-declarations (7.3.3).

However, you should not be using this header:

[C++11: C.3.1/1]: For compatibility with the Standard C library, the C++ standard library provides the 18 C headers (D.5), but their use is deprecated in C++.


If you use e.g. <cmath>

Yes, you should.

It is unspecified whether they are available in the global namespace on any particular implementation:

[C++11: 17.6.1.2/4]: Except as noted in Clauses 18 through 30 and Annex D, the contents of each header cname shall be the same as that of the corresponding header name.h, as specified in the C standard library (1.2) or the C Unicode TR, as appropriate, as if by inclusion. In the C++ standard library, however, the declarations (except for names which are defined as macros in C) are within namespace scope (3.3.6) of the namespace std. It is unspecified whether these names are first declared within the global namespace scope and are then injected into namespace std by explicit using-declarations (7.3.3).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文