有人能告诉我有什么区别吗
using namespace android;
....
和
namespace android {
....
}
我发现Android源代码中几乎所有的.cpp文件都使用了第二个。
另外,如果我想在我自己的项目中包含一些使用第二个类型的文件,我是否也需要使用namespace android{...}
?
因为如果我不这样做,当我调用包含文件的方法时,编译器会报错。还是我需要在方法调用之前添加任何前缀?
有人能告诉我有什么区别吗
using namespace android;
....
和
namespace android {
....
}
我发现Android源代码中几乎所有的.cpp文件都使用了第二个。
另外,如果我想在我自己的项目中包含一些使用第二个类型的文件,我是否也需要使用namespace android{...}
?
因为如果我不这样做,当我调用包含文件的方法时,编译器会报错。还是我需要在方法调用之前添加任何前缀?
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()
。
如果您对 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;