相关疑难解决方法(0)

345
推荐指数
9
解决办法
31万
查看次数

在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"
Run Code Online (Sandbox Code Playgroud)

如果用户错误地尝试实际打印FooType 的,则这可能是个问题.

当混合使用宽字符和窄字符时,它也是一个问题,因为您将获得打印的地址而不是编译器错误:

const wchar_t* str = L"Test! (Wide)";
// ...
cout << str << "\n"; // Ooops! Prints address of str.
Run Code Online (Sandbox Code Playgroud)

所以我想知道 - 因为我很少想输出指针值,是否可以禁用指针值的格式化,以便将指针值插入流中会导致编译器错误?(然后可以通过使用包装器类型或将指针值强制转换为size_t或某些东西来轻松实现指针值的输出.)

编辑:根据Neil的答案(通过提供我自己的void*输出操作符来禁用void*输出)我想补充一点,如果这对于Boost.Format这样的工具也有用,那会隐式使用输出在std命名空间中定义的运算符

c++ iostream

8
推荐指数
1
解决办法
725
查看次数

标签 统计

c++ ×2

iostream ×2

cout ×1

printf ×1

stdio ×1