根据C++标准( C++17 draft (N4659)的§30.7.5.2.4),如果ch是char,而out是std::ostream,则out << ch不会在ch上执行加宽操作。
这是否意味着std::ctype<char>::widen() (即char -> char)被标准保证为基本源字符集中所有字符的标识函数(widen(ch) == ch)?
如果是这样,这是否意味着标准要求所有地区都使用基本源字符集的相同非宽(或多字节)字符编码?
如果不是这样,看起来out << 'x'可能并不是在所有语言环境下都能工作,即使它在某些地区也能工作。也就是说,可能没有字符原义编码的选择,这样out << 'x'就可以同时在所有区域设置中工作。
发布于 2017-08-26 04:06:24
不,它只是说在这种情况下
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, char c);在流和<<运算符都以相同的char类型进行交易的情况下,不存在转换。
如果
c的类型为char,并且流的字符类型不是char,则seq由out.widen(c)组成;否则seq由c组成。
在所有其他情况下,区域设置用于可选地转换字符,而不限制区域设置可能执行的操作。
https://stackoverflow.com/questions/44380123
复制相似问题