[英]std::cout.imbue() multiple call
编译器:Visual Studio 2019(C++20,最新)
我有一个关于 std::locale 的问题
不能多次调用 std::cout.imbue 吗?
为什么不可能?
当我运行下面的代码时.. 我可以在第二次 imbue 函数调用后看到两个问号 (??) ..
#include <iomanip>
#include <iostream>
#include <locale>
int main()
{
auto loc = std::locale("de_DE.utf8");
std::cout.imbue(loc);
std::cout << "locale_name = " << std::cout.getloc().name() << std::endl;
std::cout << 100.50 << std::endl;
std::cout << std::showbase << std::put_money(1050) << std::endl;
std::cout.imbue(loc); // no output below
std::cout << "locale_name = " << std::cout.getloc().name() << std::endl;
std::cout << 100.50 << std::endl;
std::cout << std::showbase << std::put_money(1050) << std::endl;
}
这是输出
locale_name = de_DE.utf8
100,5
10,50 ??
没有这样的限制,我的输出是:
locale_name = de_DE.utf8
100,5
10,50 €
locale_name = de_DE.utf8
100,5
10,50 €
请注意,欧元符号可能会替换为奇怪的东西,例如??
如果您的输出终端未正确配置为显示 UTF-8 字符,或者您的终端字体中缺少该字形。
例如,根据内存,Visual Studio 的输出控制台要么不支持 Unicode,要么总是解码为 UTF-16。 两者之一。 大概是后者。
除此之外,如果您得到与上述不同的输出,那将是您的实现中一个有趣的标准库错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.