由于我不明白的原因,当我要求 Windows 以每个线程为基础存储语言环境信息时,我的单线程程序正在失去对经典(或“C”)语言环境的跟踪。这是我的源代码:
#include <string>
#include <sstream>
void print_pt_5()
{
const int precision = 6;
std::ostringstream oss;
oss.imbue(std::locale::classic());
//oss.imbue(std::locale("C"));
oss.setf(std::ios::floatfield, std::ios::fixed);
oss.precision(precision);
oss << 0.5;
printf("%s\n", oss.str().c_str());
}
int main(int argc, char* argv[])
{
print_pt_5();
// locale settings are thread-local
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
// set to german locale
setlocale(LC_ALL, "German_Austria.850");
print_pt_5();
return 0;
}
当我像这样运行它时,输出是:
0.500000
0,500000
如果我删除 _configthreadlocale 行,则输出为:
0.500000
0.500000
我正在使用 VS2012 构建并在 Windows 8 上运行。为什么在第一个示例中我得到一个逗号作为小数点?