【发布时间】:2010-12-21 04:39:43
【问题描述】:
全局命名空间中包含 C stdlib 函数真的让我很困扰,最后写了 ::snprintf 或 ::errno 或 struct ::stat 之类的东西等,以区别于我自己在使用这些 c stdlib 函数的封闭命名空间中的一些函数。
然后我发现有一种方法可以在 std 命名空间中声明每个 C stdlib 函数(作为 STL):只需包含 而不是 所以我编辑了我的代码使用那些新的“c for c++”包括。
在 Debian/GCC 4.3.4 上我必须解决 2 个问题:
1) #error 此文件需要编译器和库支持,以支持即将推出的\ ISO C++ 标准,C++0x。这种支持目前是实验性的,必须是\ 使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。
2) 使用 -std=c++0x 我的程序编译得很好,但我没有修改 ::snprintf 或 ::time 等。每个 C stdlib 函数仍在全局命名空间 =(!(不,我没有使用命名空间 std 一次也没有)
有什么想法吗?
例如..如何阻止 c stdlib 入侵我的全局命名空间? 是下一个 C++ 标准的实验性功能还是可以立即安全使用?
然后我有另一个疑问,也许值得提出一个新问题.. 没有 cmalloc。我知道关于新替换 malloc 的全部历史以及原因。但是对于简单的纯字节缓冲区,没有 realloc 的 c++ 等价物。我知道内存块和重新分配是特定于实现的,但是当有连续的空闲内存块时,重新分配比新的缓冲区分配和内存复制效果更好。
谢谢 =)!
【问题讨论】:
-
为什么还有其他
snprintf函数之类的? -
那么,你为什么在 C++ 程序中使用
snprintf? -
@jalf:因为它比 C++ 流更干净、更易读、更快?
-
tomekszpakowicz 是正确的。我认为我不需要 C++ 流来处理和操作字节缓冲区。我只是使用 snprintf 来进行字符串/整数转换.. 我理解它在流实现的内部无论如何都会使用。