Как работает следующее:Определения членов STL Static-Const
#include <limits>
int main()
{
const int* const foo = &std::numeric_limits<int> ::digits;
}
Я был под впечатлением, что для того, чтобы принять адрес static const
-ant члена, мы должны были физически определить его в какой-то единице перевода, чтобы угодить линкер. Тем не менее, посмотрев на предварительно обработанный код для этого TU, я не смог найти внешнее определение для члена digits
(или любых других соответствующих членов).
Я тестировал это на двух компиляторах (VC++ 10 и g ++ 4.2.4) и получил одинаковые результаты от обоих (то есть, он работает). Связан ли компоновщик автоматически с магическим связыванием с объектным файлом, где этот материал определен, или я пропущу что-то очевидное здесь?
Ну, две вещи: 1) Я думал, что заголовок пределов может привести его к моему модулю перевода. Кажется, не так. 2) Я посмотрел на командную строку компоновщика VS и не смог найти какие-либо «чужие» объектные файлы, неявно заданные. – javery
@javery: Foreign? Почему иностранный? Определение должно быть частью стандартной библиотеки. Вы * * со ссылкой на стандартную библиотеку, не так ли? – AnT
От «foreign» я имел в виду иностранные свои файлы; который включает стандартную библиотеку. Извините за путаницу. :) – javery