C++ What is the role of std::ctype<char>::widen()?

蓝咒 提交于 2020-06-27 06:57:35

问题


According to the C++ standard (§30.7.5.2.4 of C++17 draft (N4659)), out << ch will not perform a widening operation on ch, if ch is a char and out is a std::ostream.

Does this imply that std::ctype<char>::widen() (i.e., char -> char) is guaranteed by the standard to be an identity function (widen(ch) == ch) for all characters in the basic source character set?

If so, does this, in turn, imply that all locales are required by the standard to use the same non-wide (or multi-byte) encoding of characters from the basic source character set?

If not, it seems like out << 'x', with a particular choice of character encoding for literals, might not work in all locales, even when it works in some. That is, there might be no choice of character literal encoding, such that out << 'x' works in all locales simultaneously.


回答1:


No, it just says that in the case of

template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, char c);

where both the stream and the << operator trades in the same char type there is no conversion.

If c has type char and the character type of the stream is not char, then seq consists of out.widen(c); otherwise seq consists of c.

In all other cases the locale is used to optionally transform the character with no restrictions on what the locales might do.



来源:https://stackoverflow.com/questions/44380123/c-what-is-the-role-of-stdctypecharwiden

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!