1

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

4

0 回答 0