我刚注意到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) { ...
但是,似乎MSDN或cppref (ostream members)上都没有记录此版本。
这是标准吗?这是一个无证的MS扩展吗?有什么好处吗?
请注意,相反的情况确实会导致void*
输出:
std::cout << L"Will just print address of string";
答案 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 ++标准定义。