Объявления использования статичны?
Я немного запутался в использовании объявлений. Я это понимаю using foo::bar;
импортирует символ bar
из пространства имен foo
в текущее пространство имен, но происходит ли это статически или динамически?
Более конкретно, приводят ли использование-декларации к накладным расходам? Можно ли импортировать разные символы с одинаковыми именами в зависимости от условия? (это было бы плохой практикой, но мне все равно любопытно)
Такое ощущение, что оно должно быть статичным, но я не могу найти ничего, чтобы это подтвердить...
3 ответа
Разрешение пространства имен происходит во время компиляции. Вы не можете изменить их динамически во время выполнения.
Один из способов импортировать разные символы в зависимости от условия - использовать директивы препроцессора и макросы:
#ifdef USEA
using a::f;
#else
using b::f;
#endif
using
в c++
директива времени компиляции, т.е. она влияет только на то, как компилятор разрешает имена во время компиляции
Можно ли импортировать разные символы с одинаковыми именами в зависимости от условия?
Зависит от того, о каком состоянии вы говорите. В случае, если условие препроцессора, как #ifdef
Да, это возможно. Если вы думаете о состоянии во время выполнения, то нет, using
не выполняется во время выполнения
Использование объявлений выглядит как любые другие объявления. Он имеет свою область видимости в зависимости от того, где он написан. Вы не можете динамически объявлять переменную.