通过std :: wostream定义的char *字符串输出?

时间:2014-02-05 13:18:45

标签: c++ visual-c++ iostream

我刚注意到char*std::wcout的输出在MSVC上完全正常(使用VS2005和VS 2010进行测试)。

std::wcout << L"Works as expected";
std::wcout << "This ALSO DOES print the string";

确实,调试到输出我们得到<ostream>标题:

template<class _Elem, class _Traits> 
inline basic_ostream<_Elem, _Traits>& 
operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val) { ...

但是,似乎MSDNcppref (ostream members)上都没有记录此版本。

这是标准吗?这是一个无证的MS扩展吗?有什么好处吗?


请注意,相反的情况确实会导致void*输出:

std::cout << L"Will just print address of string";

1 个答案:

答案 0 :(得分:3)

至少根据cppref (non-member operator<<)来定义它(见第六个从顶部开始)

template< class CharT, class Traits >
basic_ostream<CharT,Traits>& operator<<( basic_ostream<CharT,Traits>& os, 
                                     const char* s );

另外,看一下评论:

  

在插入之前,首先,使用os.widen()扩大所有字符,   然后......

这似乎很好地由C ++标准定义。