ostream оператор << использует num_put::put() для форматирования чисел. Я пытаюсь выполнить код. Я привяжусь к файлам OSX, но похожие файлы появятся на некоторых других системах, на которые я смотрел. Мне кажется, что num_put::put() вызывает num_put::do_put(), который вызывает
num_put::_M_insert_float(), который calls __convert_from_v():
http://www.opensource.apple.com/source/libstdcxx/libstdcxx-60/include/c++/4.2.1/bits/c++locale.h
http://www.opensource.apple.com/source/libstdcxx/libstdcxx-60/include/c++/4.2.1/bits/locale_facets.tcc
http://www.opensource.apple.com/source/libstdcxx/libstdcxx-60/include/c++/4.2.1/bits/locale_facets.h
 __convert_from_v() проверяет текущую глобальную локаль, и если она отличается от "C" , тогда она вызывает setlocale(), чтобы установить глобальную локальу на "C" , затем использует vsnprintf() для форматирования номера, а затем вызывает setlocale() снова, чтобы вернуться к старой локали.
Так как setlocale() влияет на все потоки, кажется, что вызов ostream operator << с числом с плавающей запятой является небезопасным в многопоточном приложении, которое имеет глобальную локаль, установленную на что-то другое, чем "C" . Но это было бы очень странно, так что мне не хватает? Спасибо!
