Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认C+;中的toupper()会转换哪些字符+;场所_C++_Locale - Fatal编程技术网

C++ 默认C+;中的toupper()会转换哪些字符+;场所

C++ 默认C+;中的toupper()会转换哪些字符+;场所,c++,locale,C++,Locale,例如,在默认的“C”语言环境中,只有a-z被转换为as。哪些字符恰好被默认的C++区域? 我问是因为 STD::ToupPL(L'ω),STD::LoaLe::Calpic():在Windows上返回 L 'Ω'/Cuff>,我想知道C++的其他字符还返回了大写表单。在“C”语言环境中,相同的字符不会被转换:static\u cast(std::towupper(static\u cast(L'ω))按预期返回L'ω' 我使用以下程序来验证这一点: #include <cwctype>

例如,在默认的“C”语言环境中,只有a-z被转换为as。哪些字符恰好被默认的C++区域? 我问是因为<代码> STD::ToupPL(L'ω),STD::LoaLe::Calpic():在Windows上返回<代码> L 'Ω'/Cuff>,我想知道C++的其他字符还返回了大写表单。在“C”语言环境中,相同的字符不会被转换:
static\u cast(std::towupper(static\u cast(L'ω))
按预期返回
L'ω'

我使用以下程序来验证这一点:

#include <cwctype>
#include <fstream>
#include <locale>

int main()
{
  std::wofstream fs("out.txt");
  fs.imbue(std::locale("en_US.UTF8"));
  fs << L"std::toupper(L'ω', std::locale::classic()): " << std::toupper(L'ω', std::locale::classic()) << std::endl;
  fs << L"static_cast<wchar_t>(std::towupper(static_cast<std::wint_t>(L'ω'))): "
     << static_cast<wchar_t>(std::towupper(static_cast<std::wint_t>(L'ω'))) << std::endl;

  return 0;
}
gcc版本8.4.0(Ubuntu 8.4.0-1ubuntu1~18.04)的输出:

std::toupper(L'ω',std::locale::classic()):ω
静态施法(标准::towupper(静态施法(L'ω')):ω

这取决于默认的语言环境是什么。。。这取决于本地配置,您没有完全描述它(Ubuntu系统上的LOCALE环境变量是什么,Windows系统是如何本地化的?)。标准指定了
C
locale,但是没有
C++
one:它只是指使用当前系统的locale。我在示例中使用了
std::locale::classic()。这不应该对环境保持不变吗?Ubuntu在WSL中运行,
LANG
环境变量设置为
C.UTF-8
。Windows系统设置为“英语(美国)”。这是我对默认区域的理解:默认情况下(在程序启动时)C++环境是“代码> STD:::LoaLe::Cyric())/Cuth>,这意味着使用C语言环境。默认的C语言环境相当于std::setlocale(LC_ALL,“C”)这是一个最小的区域设置和。我假设“最小”意味着与环境无关。除非在程序中调用了
std::setlocale()
或std::locale::global()`否则,我认为环境设置不会对任何
toupper()
函数的结果产生任何影响(无论是C还是C++)。
std::toupper(L'ω', std::locale::classic()): Ω
static_cast<wchar_t>(std::towupper(static_cast<std::wint_t>(L'ω'))): ω
std::toupper(L'ω', std::locale::classic()): ω
static_cast<wchar_t>(std::towupper(static_cast<std::wint_t>(L'ω'))): ω