Определение STL Static-Const - PullRequest
       22

Определение STL Static-Const

3 голосов
/ 23 апреля 2010

Как работает следующее?

#include <limits>

int main()
{
  const int* const foo = &std::numeric_limits<int> ::digits;
}

У меня сложилось впечатление, что для того, чтобы получить адрес члена static const, нам нужно было физически определить его в каком-то блоке перевода, чтобы угодить компоновщику. Тем не менее, просмотрев предварительно обработанный код для этого TU, я не смог найти внешнее определение для элемента digits (или любых других соответствующих элементов).

Я проверил это на двух компиляторах (VC ++ 10 и g ++ 4.2.4) и получил идентичные результаты от обоих (то есть, это работает). Линкер автоматически связывается с объектным файлом, в котором определен этот материал, или я что-то упускаю здесь очевидное?

1 Ответ

2 голосов
/ 23 апреля 2010

Ну, что заставляет вас думать, что оно не определено? Тот факт, что ваша попытка получить адрес была успешной, автоматически указывает на то, что где-то определено . Конечно, не обязательно находиться в вашем блоке перевода, поэтому просмотр выходных данных препроцессора не имеет особого смысла.

...