2

有人能告诉我有什么区别吗

using namespace android;
    .... 

namespace android {
    ....
}

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

4

2 回答 2

6
namespace android {
  extern int i;  // declare here but define somewhere
  void foo ();
}

-- 用于限定特定名称内的变量和函数。在使用/调用这些变量/函数时,使用范围解析操作符::。例如

int main ()
{
  android::foo();
}

namespace将所有声明放在单个主体实例中没有任何限制。分布在多个文件中的多个namespace android主体是可能的,有时也推荐使用。例如

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

// y.cpp
namespace android {
  void somefunc_2 ();
}

::现在,如果经常使用,有时您可能会发现使用运算符不方便,这会使名称不必要地变长。那时using namespace可以使用指令。

using指令可用于函数作用域/命名空间作用域/全局作用域;但不允许在class范围内:为什么“使用命名空间 X;” 不允许在类/结构级别内?)。

int main ()
{
  using namespace android;
  foo(); // ok
}

void bar ()
{
  foo(); // error! 'foo' is not visible; must access as 'android::foo()'
}

顺便说一句,如果using namespace android;全局声明(即上面main()),那么foo()也可以在没有::in 的情况下访问Bar()

于 2011-10-19T03:32:51.750 回答
2

如果您对 Java 更有经验,我的回答可能只会有帮助。我猜因为你正在做android的东西,情况就是这样。

以下意味着您正在声明一个MyClass在命名空间中调用的类android。类的限定名称是android::MyClass.

namespace android {
    class MyClass {...};
}

可以认为它类似于 Java 代码:

package android;

public class MyClass {...}

以下意味着您可以使用android命名空间中定义的类、函数等,而不必使用它们的限定名称(假设它们已被包含在内)。

using namespace android;

这个

#include <path/to/MyClass.h>
using namespace android;

可以认为类似于 Java 代码:

import android.MyClass;
于 2011-10-19T03:46:53.227 回答