3

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

TIA 帕沃

4

2 回答 2

2

尽管建议这是 rubenvb 的预期行为,但这实际上是我不久前遇到的一个错误。我怀疑 rubenvb 误读了这部分问题:

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

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

于 2011-10-10T01:29:27.087 回答
0

_configthreadlocale设置属性的调用,在调用之前,没有什么特别的事情发生。所以是的,这是预期的行为。您首先必须调用此函数,然后才能利用线程本地语言环境。

于 2011-09-22T14:21:42.317 回答