【发布时间】:2011-05-23 07:49:28
【问题描述】:
如果您将任何指针传递给 C++ 流,它的地址将被放入输出中。 (显然,除非有更具体的输出处理程序。)
void* px = NULL;
const char* ps = "Test";
FooType* pf = ...;
stringstream s;
s << ps << " " << px << " " << pf "\n";
s.str(); // yields, for example: "Test 0 AF120089"
如果用户错误地尝试实际打印 FooType 的 值,这可能是一个问题。
而且在混合宽字符和窄字符时也是一个问题,因为不是编译器错误,而是打印地址:
const wchar_t* str = L"Test! (Wide)";
// ...
cout << str << "\n"; // Ooops! Prints address of str.
所以我想知道 - 因为我很少想要输出指针值,是否可以禁用指针值的格式化,以便将指针值插入流中会导致编译器错误?(然后可以通过使用包装类型或将指针值强制转换为 size_t 或类似的方式轻松实现指针值的输出。)
编辑:鉴于Neil's answer(通过提供我自己的 void* 输出运算符来禁用 void* 输出)我想补充一点,如果这也适用于诸如Boost.Format,隐式使用std 命名空间中定义的输出运算符...
【问题讨论】: