由于我不明白的原因,当我要求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上运行。为什么我在第一个示例中得到小数点的逗号?