如果您将任何指针指向C++流,它的地址将被放入输出中。 (显然,除非有一个更具体的输出处理程序。)禁用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光(通过提供您自己的空隙禁用无效*输出*输出运算符)我想补充一点,如果这也适用于诸如Boost.Format之类的工具,它们会隐式使用std
命名空间中定义的输出运算符...
嗯......这看起来没问题。 “普通”的void *输出操作符是在namespace std中定义的,不是?所以如果有代码使用std的代码,这不会有帮助...? – 2011-05-23 08:44:29
有点有用,但是在形式上你不允许在没有至少一个用户定义的参数类型的情况下重载操作符。 – 2011-05-23 09:27:15
@Bo你认为ostream是什么? – 2011-05-23 09:29:04