C++ std :: ctype <char> :: widen()的作用是什么?

Kri*_*ege 10 c++ locale stl ostream language-lawyer

根据C++标准(C++ 17 draft(N4659)的第30.7.5.2.4节),如果是a 并且是a ,out << ch则不会执行扩展操作.chchcharoutstd::ostream

这是否意味着标准保证std::ctype<char>::widen()(即char- > char)是widen(ch) == ch基本源字符集中所有字符的标识函数()?

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

如果没有,似乎out << 'x'对文字的特定字符编码选择可能不适用于所有语言环境,即使它在某些语言环境中有效.也就是说,可能没有选择字符文字编码,因此可以out << 'x'同时在所有语言环境中使用.

Bo *_*son 1

不,它只是说在这种情况下

template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, char c);
Run Code Online (Sandbox Code Playgroud)

如果流和<<运算符都以相同char类型进行交易,则不会发生转换。

如果c具有类型char并且流的字符类型不是char,则 seq 包含 out.widen(c); 否则 seq 由 组成c

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