C++ 中 C 库的范围- 与
《C++ 编程语言:特别版》第 431 页指出...
对于每个标头
Xh>在全局命名空间和命名空间 std 中定义 C 标准库的一部分,有一个头文件 < CX>仅在 std 命名空间中定义相同的名称。
但是,当我在 < 中使用 C 标头时CX>样式,我不需要限定名称空间。例如...
#include <cmath>
void f() {
double var = sqrt( 17 );
}
这可以很好地编译。尽管书上说使用 < CX> header 仅定义 std 命名空间中的名称,您可以在不限定命名空间的情况下使用这些名称。我在这里缺少什么?
PS 使用GNU.GCC编译器
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
MSVC 团队成员 Stephan T. Lavavej 在他的一篇博客文章 (http://blogs.msdn.com/vcblog/archive/2008/08/28/the-mallocator .aspx#8904359):
我 100% 同意 Lavavej,只是我从来没有试图变得非常即使当我第一次开始使用 C++ 时,也要小心使用
样式标头 - 标准 C 的标头太根深蒂固了 - 并且使用它们从来没有任何现实问题(而且显然从来没有使用
样式标头对现实世界有任何好处)。Stephan T. Lavavej, a member of the MSVC team, addresses the reality of this situation (and some of the refinements to the standard) in this comment on one of his blog postings (http://blogs.msdn.com/vcblog/archive/2008/08/28/the-mallocator.aspx#8904359):
I'm in 100% agreement with Lavavej, except I never tried to be very careful about using the
<cfoo>
style headers even when I first started using C++ - the standard C ones were just too ingrained - and there was never any real world problem using them (and apparently there was never any real world benefit to using the<cfoo>
style headers).C 库的规则与命名空间的 C++ 库不同
gcc 解释 Gcc 中的标准文档为
在 C0X++ 规范草案中,它在第 17.6.2.3 标头部分中提到
The rule for the C libraries differs from C++ libraries for namespaces
gcc interprets the standard in Gcc docs as
In the draft C0X++ spec it says in section 17.6.2.3 Headers
如果不实现两次 C 库,就很难解决这个问题。请参阅 DR 456,基本上建议放弃这个问题。
It's hard to fix this without implementing the C library twice. See DR 456, which basically proposes giving up on the problem.
当它违反标准时,为什么你说“这会编译得很好”?谁允许您在不限定命名空间的情况下使用这些名称?您是否在特定实现上对此进行了测试并发现它有效?
我强烈建议不要使用某些特定的非标准功能,因为它恰好适用于您选择的编译器。这些东西很容易被破坏,也许使用同一编译器的更高版本。
Why do you say "This would compile fine" when it violates the Standard? Who allows you to use those names without qualifying the namespace? Have you tested this on a particular implementation and found that it works?
I strongly advise against using some particular non-standard feature because it happens to work on your compiler of choice. Such things break easily, perhaps with a later version of the same compiler.
您可能缺少使用符合标准的编译器(或者您使用的编译器配置为与标准前的代码兼容)。
You are probably missing using a standards-conformant compiler (or the one you use is configured to be compatible with pre-standard code).