2017-06-06 134 views
10

根据C++标准(§30.7.5.2.4C++ 17草案(N4659)的),out << ch不会在ch执行加宽操作中,如果chcharoutstd::ostreamC++ std :: ctype的作用是什么<char> :: widen()?

这是否意味着std::ctype<char>::widen()(即,char - >char)由标准保证是在基本的源字中的所有字符的标识功能(widen(ch) == ch)设置?

如果是这样,这反过来是否意味着标准要求所有区域设置使用基本源字符集中相同的非宽(或多字节)字符编码?

如果不是,看起来像out << 'x',对文字的字符编码的特定选择,可能无法在所有语言环境中工作,即使它在某些情况下工作。也就是说,可能不会选择字符文字编码,因此out << 'x'可以在所有语言环境中同时运行。

回答

1

不,它只是说,在

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组成。

在所有其他情况下,区域设置用于可选地转换字符,而不会限制区域设置可能执行的操作。

相关问题