Объявления использования статичны?

Я немного запутался в использовании объявлений. Я это понимаю using foo::bar; импортирует символ bar из пространства имен foo в текущее пространство имен, но происходит ли это статически или динамически?

Более конкретно, приводят ли использование-декларации к накладным расходам? Можно ли импортировать разные символы с одинаковыми именами в зависимости от условия? (это было бы плохой практикой, но мне все равно любопытно)

Такое ощущение, что оно должно быть статичным, но я не могу найти ничего, чтобы это подтвердить...

3 ответа

Решение

Разрешение пространства имен происходит во время компиляции. Вы не можете изменить их динамически во время выполнения.

Один из способов импортировать разные символы в зависимости от условия - использовать директивы препроцессора и макросы:

#ifdef USEA
using a::f;
#else
using b::f;
#endif

using в c++ директива времени компиляции, т.е. она влияет только на то, как компилятор разрешает имена во время компиляции

Можно ли импортировать разные символы с одинаковыми именами в зависимости от условия?

Зависит от того, о каком состоянии вы говорите. В случае, если условие препроцессора, как #ifdef Да, это возможно. Если вы думаете о состоянии во время выполнения, то нет, using не выполняется во время выполнения

Использование объявлений выглядит как любые другие объявления. Он имеет свою область видимости в зависимости от того, где он написан. Вы не можете динамически объявлять переменную.

Другие вопросы по тегам