代码之家  ›  专栏  ›  技术社区  ›  paavo256

_configthreadlocale和localeconv

  •  2
  • paavo256  · 技术社区  · 16 年前

    众所周知,全局数据,比如影响printf()和strtod()使用的数字小数点的区域设置,是有害的。幸运的是,MSVC++9允许通过 _configthreadlocale(_ENABLE_PER_THREAD_LOCALE) 呼叫不幸的是,localeconv()函数似乎没有注意到这一点,仍然返回全局区域设置,例如localeconv()->小数点似乎总是在调用_configthreadlocale()之前返回全局语言环境设置。这是MSVC库中的一个bug还是预期的bug?

    蒂亚 帕沃

    2 回复  |  直到 13 年前
        1
  •  2
  •   gigaplex    13 年前

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

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

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

        2
  •  0
  •   rubenvb    14 年前

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

    推荐文章