有人能告诉我什么是两者之间的区别吗?
using namespace android;
....
并且
namespace android {
....
}
我发现在Android源代码中,几乎所有的.cpp文件都使用第二种方式。
另外,如果我想在自己的项目中包含一些使用第二种方式的文件,我需要使用
namespace android{...}
吗?因为如果我不这样做,在调用已包含文件的方法时编译器会报错。或者我需要在方法调用之前添加任何前缀吗?
有人能告诉我什么是两者之间的区别吗?
using namespace android;
....
namespace android {
....
}
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指令可以在函数作用域/命名空间作用域/全局作用域中使用;但是不允许在类作用域中使用:为什么"using namespace X;"不允许在类/结构体层级内部使用?)
int main ()
{
using namespace android;
foo(); // ok
}
void bar ()
{
foo(); // error! 'foo' is not visible; must access as 'android::foo()'
}
顺便提一下,如果在全局范围内(即在 main()
函数之前)声明了 using namespace android;
,则在 Bar()
函数中也可以无需使用 ::
直接访问 foo()
。
如果您对Java有更多的经验,我的答案可能会有所帮助。我猜想,由于您正在进行Android开发,这种情况可能是存在的。
以下意味着您在命名空间android
中声明了一个名为MyClass
的类。该类的限定名称将是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;