使用声明是静态的吗?

Are using-declarations static?

我对 using 声明有点困惑。我知道 using foo::bar; 将符号 bar 从命名空间 foo 导入当前命名空间,但这是静态发生还是动态发生的?

更具体地说,使用声明会导致开销吗?是否可以根据条件导入具有相同名称的不同符号? (那是不好的做法,但我还是很好奇)

感觉应该是静态的,但是我找不到任何东西来证实这一点...

使用声明看起来像任何其他声明。它有自己的范围,具体取决于它的写入位置。您不能动态声明变量。

名称空间解析发生在编译时。您不能在 运行 时动态更改它们。

根据条件导入不同符号的一种方法是使用预处理器指令和宏:

#ifdef USEA
using a::f;
#else
using b::f;
#endif
c++ 中的

using 编译时 指令,即它只影响编译器在编译期间如何解析名称

Would it be possible to import different symbols with the same name depending on a condition?

取决于你说的是什么条件。如果预处理器的条件像 #ifdef 是的,这是可能的。如果您考虑 运行 时间条件,那么不,using 不会在 运行 时间执行