C++ “使用”命名空间和声明命名空间之间有什么区别?

C++ “使用”命名空间和声明命名空间之间有什么区别?,c++,namespaces,terminology,using,using-directives,C++,Namespaces,Terminology,Using,Using Directives,有人能告诉我这两者的区别吗 using namespace android; .... 及 我发现Android源代码中几乎所有的.cpp文件都使用第二个。 另外,如果我想在我自己的项目中包含一些使用第二种类型的文件,我是否也需要使用名称空间android{…}? 因为若我不这样做,当我调用包含文件的方法时,编译器会报告错误。或者我需要在方法调用之前添加前缀吗 namespace android { extern int i; // declare here but defin

有人能告诉我这两者的区别吗

using namespace android;
    .... 

我发现Android源代码中几乎所有的.cpp文件都使用第二个。 另外,如果我想在我自己的项目中包含一些使用第二种类型的文件,我是否也需要使用名称空间android{…}? 因为若我不这样做,当我调用包含文件的方法时,编译器会报告错误。或者我需要在方法调用之前添加前缀吗

namespace android {
  extern int i;  // declare here but define somewhere
  void foo ();
}
-用于限定特定名称内的变量和函数的范围。在使用/调用这些变量/函数时,请使用范围解析运算符:。e、 g

将所有命名空间声明放在单个实体实例中没有限制。多个名称空间android实体分布在多个文件中,这是可能的,有时也推荐使用。e、 g

// x.cpp
namespace android {
  void somefunc_1 ();
}

// y.cpp
namespace android {
  void somefunc_2 ();
}
现在,如果频繁使用::operator,有时您可能会发现使用::operator很不方便,这会使名称不必要地变长。此时可以使用usingnamespace指令

此using指令可用于函数范围/命名空间范围/全局范围;但在类作用域中不允许:

顺便说一句,Had使用android名称空间;全局声明,即在main之上,那么也可以在没有::in Bar的情况下访问foo

-用于限定特定名称内的变量和函数的范围。在使用/调用这些变量/函数时,请使用范围解析运算符:。e、 g

将所有命名空间声明放在单个实体实例中没有限制。多个名称空间android实体分布在多个文件中,这是可能的,有时也推荐使用。e、 g

// x.cpp
namespace android {
  void somefunc_1 ();
}

// y.cpp
namespace android {
  void somefunc_2 ();
}
现在,如果频繁使用::operator,有时您可能会发现使用::operator很不方便,这会使名称不必要地变长。此时可以使用usingnamespace指令

此using指令可用于函数范围/命名空间范围/全局范围;但在类作用域中不允许:


顺便说一句,Had使用android名称空间;全局声明,即在main之上,那么也可以在没有::in Bar的情况下访问foo。

我的回答可能只有在您对Java有更多经验的情况下才有用。我猜既然你在做android的东西,情况就是这样

下面的意思是您正在名称空间android中声明一个名为MyClass的类。类的限定名称将是android::MyClass

它可以被认为与Java代码类似:

package android;

public class MyClass {...}
import android.MyClass;
下面的意思是,您可以使用android名称空间中定义的类、函数等,而不必使用它们的限定名(假设它们已包含在内)

using namespace android;
这个


我的答案可能只有在您对Java更有经验的情况下才有用。我猜既然你在做android的东西,情况就是这样

下面的意思是您正在名称空间android中声明一个名为MyClass的类。类的限定名称将是android::MyClass

它可以被认为与Java代码类似:

package android;

public class MyClass {...}
import android.MyClass;
下面的意思是,您可以使用android名称空间中定义的类、函数等,而不必使用它们的限定名(假设它们已包含在内)

using namespace android;
这个


你需要阅读C++命名空间是如何工作的,它们是什么意思。对不起,我是C++新手,我只知道使用命名空间XXX。谢谢你的评论,我会进一步研究的。谢谢。:-酷酷的Bohan Lu-所有的使用都是从某处开始的-我的建议是尽可能多地学习,并提出一个非常具体的问题。我也写了一个很好的答案好的,我明白了。谢谢你的回答和建议,阿德里安、艾米林和加里。下次我会更加注意提问。祝你今天愉快-你需要阅读C++命名空间是如何工作的,它们是什么意思。对不起,我是C++新手,我只知道使用命名空间XXX。谢谢你的评论,我会进一步研究的。谢谢。:-酷酷的Bohan Lu-所有的使用都是从某处开始的-我的建议是尽可能多地学习,并提出一个非常具体的问题。我也写了一个很好的答案好的,我明白了。谢谢你的回答和建议,阿德里安、艾米林和加里。下次我会更加注意提问。祝你今天愉快-谢谢你,我是米林。我对C++很陌生,谢谢你的详细解释。我会研究更多的,再次感谢。谢谢你,我的朋友。我对C++很陌生,谢谢你的详细解释。我会研究更多的,再次谢谢。谢谢你,加里。是的,我在做Android的东西。我对C和java很熟悉,而不是C++。谢谢你的解释,所以我现在明白了区别。谢谢你,谢谢你,加里。是的,我在做Android的东西。我对C和java很熟悉,而不是C++。谢谢你的解释,所以我现在明白了区别。非常感谢。
import android.MyClass;