繁体   English   中英

为什么w / cout不支持字符串U / u前缀?

[英]Why w/cout does not support string U/u prefixes?

我有以下受SO问题之一启发的代码:

int main()
{
    wcout << "\n\n 1- Test normal string with wcout \n";
    wcout << u8"\n 2- Test (u8) string with wcout  \n";
    wcout << u"\n 3- Test (u) string with wcout \n";
    wcout << U"\n 4- Test (U) string with wcout \n";
    wcout << L"\n 5- Test (L) string with wcout \n\n"; 
}

结果是:

产量

cout具有类似的输出。

我从这篇文章的答案中了解到,w / cout不支持字符串U / u前缀,或者不完全如前所述:

同时std::cout's类对于const char16_t*const char32_t*const wchar_t*没有特殊的<<重载,因此它将匹配<<的重载以打印指针。

我的问题是:

1-为什么它不支持这些类型? 语言不支持自己的类型不是很奇怪吗? 2-是否有已知的计划在可见的将来增加这种支持?

我知道iostream是一个库,但是实际上,它仍然是该语言的一部分。

对标准库遗漏的通常答案是:没有人建议为char16_t const*char32_t添加重载。 添加字符类型的建议( N2249 )不包含相关的库部分。 特别是,它没有为

template <typename charT, typename Traits>
std::basic_ostream<charT, Traits>& std::operator<< (std::basic_ostream<charT, Traits>&, char16_t const*);
template <typename charT, typename Traits>
std::basic_ostream<charT, Traits>& std::operator<< (std::basic_ostream<charT, Traits>&, char32_t const*);

由于这些运算符的重载为void const* ,因此将打印指针的地址。 由于新字符类型毫无意义(至少,从我的角度来看:仅使用UTF8),我怀疑是否有人对创建建议感兴趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM