是否建议在函数中使用using关键字
Is it recommended to use the using keyword in a function?
我正在编辑一个由其他人编写的大型源文件。他们没有将using namespace xxx
指令放在文件范围内,我也不想将其添加到文件范围内并编辑xxx::typename
到typename
的所有出现。但是,同时,我不想在这个文件中编写的新函数中不断键入所有这些长嵌套的命名空间名称,所以我决定在函数中使用using指令,如下所示:
void foo()
{
using namspace namesp1::namesp2;
// do foo stuff
}
这段代码编译得很好,但我不确定是否有任何问题。是否有任何规则规定何时应该首选文件或函数范围?
有这样的gotchas。如果将using namespace blah;
放在文件范围内,那么无论存在什么问题,都仍然存在,但仅限于函数。当您必须键入非常长的类型名称(foo::bar::blah::something::thingy var;
(时,这通常是一个合理的折衷方案。
一个稍微好一点的选择是使用别名:
void foo()
{
using p1p2 = namesp1::namesp2;
// do stuff
}
然后您可以使用p1p2::thingy
,这使得名称空间冲突的可能性更小。
引入一个完整的命名空间会产生一些不良后果。考虑这个例子
void foo() {
using namspace A;
using namspace B;
bar();
A::moo();
B::moo();
};
- 很难从哪个命名空间中看到符号。
bar
是来自A
还是来自B
?或者可能来自全局命名空间 - 符号(例如
moo
(在多个命名空间中声明——如果你是using
——无论如何都必须完全限定 - 假设
bar
来自A
,如果稍后B
添加了bar
,则代码将中断
最好只使用您需要的东西:
void foo() {
using A::bar;
bar();
}
相关文章:
- 是否建议在函数中使用using关键字
- 如何使用 "using" 关键字定义函数原型/签名
- C++使用 using 关键字键入别名
- C++带有 using 关键字和参数包的模板函数
- 如何将"using"关键字用于可变参数模板
- 如何在C++中使用"using"关键字
- 使用 "using" 关键字继承基类的复制和移动构造函数
- 在纯虚函数上应用 "using" 关键字C++
- C++- "using"关键字或使用带有范围解析运算符的命名空间名称
- 使用 "using" 关键字作为伪预处理器
- 如何在方法中使用 make "using" 关键字以接受它作为类级别
- "using"关键字在 c++ 中究竟有什么作用?
- C++中"using"关键字背后的逻辑是什么?
- C++11`using`关键字:专门化模板参数的模板别名
- C++避免使用 using 关键字在派生类中进行动态调度
- 如何使用模板函数C++ 11 的 using 关键字来删除作用域中的命名空间
- 了解'using'关键字:C++
- 为什么VC++2013拒绝编译嵌套类型,当用作模板函数返回类型时,用using关键字使其可见
- 不赞成使用访问声明,而是使用-declarations;建议:添加“using”关键字
- 调用基类构造函数的"Using"关键字