使用声明是静态的吗?
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
不会在 运行 时间执行
我对 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
不会在 运行 时间执行