提问人:DigitalEye 提问时间:11/8/2019 更新时间:11/8/2019 访问量:144
是否建议在函数中使用 using 关键字?[已结束]
Is it recommended to use the using keyword in a function? [closed]
问:
我正在编辑由其他人创作的大型源文件。他们没有将指令放在文件范围内,我不想将其添加到文件范围内并编辑所有出现的 .但是,与此同时,我不想继续在我在此文件中编写的新函数中键入所有这些长嵌套的命名空间名称,因此我决定在函数中使用 using 指令,如下所示:using namespace xxx
xxx::typename
typename
void foo()
{
using namspace namesp1::namesp2;
// do foo stuff
}
这段代码编译得很好,但我不确定是否有任何问题。是否有任何规则规定何时应首选文件或函数范围?
答:
4赞
P.P
11/8/2019
#1
它本身就存在一些问题。如果将问题放在文件范围内,无论存在什么问题,仍然存在,但仅限于函数。
当您必须键入很长的类型名称 () 时,这通常是一个合理的折衷方案。using namespace blah;
foo::bar::blah::something::thingy var;
一个稍微好的选择是使用别名:
void foo()
{
using p1p2 = namesp1::namesp2;
// do stuff
}
然后,您可以使用 这使得命名空间冲突的可能性更小。p1p2::thingy
评论
0赞
DigitalEye
11/8/2019
这正是我的问题,有许多嵌套的命名空间。我通常定义别名以使我的 STL 数据成员更具可读性,但在函数中使用它们以防止繁琐的键入也同样有效。我将采用这种方法。
0赞
DigitalEye
11/12/2019
using 关键字在此上下文中不起作用。我想你的意思是说namespace p1p2 = namesp1::namesp2
0赞
P.P
11/12/2019
创建别名@DigitalEye自 C++11 起有效。你所拥有的也会起作用。using
0赞
P.P
11/12/2019
en.cppreference.com/w/cpp/language/type_alias 的例子很少。
3赞
463035818_is_not_an_ai
11/8/2019
#2
拉入完整的命名空间有几个不好的后果。请看这个例子
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 std::cout;
using namespace std;
using
using
namespace xxx { int std;