Visual c++ _configthreadlocale和localeconv

Visual c++ _configthreadlocale和localeconv,visual-c++,locale,localeconv,Visual C++,Locale,Localeconv,众所周知,全局数据,如影响printf()和strtod()所使用的数字小数点的区域设置,是有害的。幸运的是,MSVC++9允许通过\u configthreadlocale(\u ENABLE\u per\u thread\u LOCALE)调用使用每线程区域设置。不幸的是,localeconv()函数似乎没有注意到这一点,仍然返回全局区域设置,例如localeconv()->decimal\u point似乎总是在调用_configthreadlocale()之前返回全局区域设置。这是MSV

众所周知,全局数据,如影响printf()和strtod()所使用的数字小数点的区域设置,是有害的。幸运的是,MSVC++9允许通过
\u configthreadlocale(\u ENABLE\u per\u thread\u LOCALE)
调用使用每线程区域设置。不幸的是,localeconv()函数似乎没有注意到这一点,仍然返回全局区域设置,例如localeconv()->decimal\u point似乎总是在调用_configthreadlocale()之前返回全局区域设置。这是MSVC库中的一个bug还是预期的bug

短暂性脑缺血发作
Paavo

调用
\u configthreadlocale
设置属性,在调用之前,不会发生任何特殊情况。所以是的,这是预期的行为。首先必须调用此函数,然后才能利用线程本地语言环境。

尽管有人认为这是rubenvb的预期行为,但这实际上是我不久前遇到的一个bug。我怀疑鲁本布误读了问题的这一部分:

不幸的是,localeconv()函数似乎没有注意到这一点,仍然返回全局区域设置,例如localeconv()->decimal\u point似乎总是在调用_configthreadlocale()之前返回全局区域设置

在调用_configthreadlocale()之前,问题并不是让localeconv()在每个线程的基础上返回,因为这样会破坏时间连续性。问题是在调用_configthreadlocale()之后调用localecov()的结果与之前调用它的结果相同,这是出乎意料的。这实质上意味着在使用“配置”时,基本上会破坏C++ STL流的微软实现。