无题
# 命名空间方法的使用
#
# include <iostream>
using namespace std;
引入命名域,如果没有引入命名域,则在 cout 以及 cin 都需要写成
std::cout
std::cin‘
命名空间的作用
首先我们知道 C++ 是一个支持面向对象开发的语言,那么在类的定义的时候,我们需要抽象出物体(这一类物体的属性),但是实际情况下,不同类的物品在抽象的时候,可能会有相同定义的属性,比如在游戏当中,玩家有血量 HP ,敌人同样也有血量 HP,那如果定义变量的时候都定义 HP
,将会产生冲突,命名空间就很好地解决了这一点。
如下:
namespace Player
{
float hp;
}
namespace Enemy
{
float hp;
}
int main
{
Player::hp;
Enemy::hp;
return 0;
}
在上述例子中,我分别创建了两个命名空间 “ Player
”,“ Enemy
”, 我在调用他们的时候都必须要在变量前面提前使用作用域限定符号 ==::==。
如此如做就对变量进行了很好地区分。同时比起直接该变量名去解决冲突,也提高了可读性和易维护性。
# 一些奇怪的问题
Q(imcenyi): 那如果有两个全局命名空间比如 a,b, 这两个命名空间下都有变量 num,那如果我在一个程序中,声明了两个命名空间 a,b,这个时候我调用 num 的时候,会发生什么,会报错吗
A(GitHub Copilot): 如果在一个程序中声明了两个命名空间 a
和 b
,并且这两个命名空间下都有变量 num
,那么在调用 num
变量时,编译器会根据作用域规则来确定使用哪个命名空间下的 num
变量。
具体来说,如果在某个作用域中使用了 num
变量,编译器会按照以下顺序查找 num
变量:
- 查找当前作用域中是否有名为
num
的变量,如果有,则使用该变量。 - 如果当前作用域中没有名为
num
的变量,则查找最近的外层作用域中是否有名为num
的变量,如果有,则使用该变量。 - 如果所有外层作用域中都没有名为
num
的变量,则查找命名空间a
中是否有名为num
的变量,如果有,则使用该变量。 - 如果命名空间
a
中没有名为num
的变量,则查找命名空间b
中是否有名为num
的变量,如果有,则使用该变量。 - 如果命名空间
b
中也没有名为num
的变量,则编译器会报错。
因此,如果在程序中声明了两个命名空间 a
和 b
,并且这两个命名空间下都有变量 num
,那么在调用 num
变量时,编译器会根据作用域规则来确定使用哪个命名空间下的 num
变量,不会报错。但是,为了避免命名冲突,建议在程序中尽量避免使用相同的变量名。
希望这可以帮助到你!
# C++ 完全兼容 C
同样 C++ 也完全兼容 C 的全部源文件 但是要再.h 文件名前加 C,如:
# include <cstdio.h>
# 定义命名空间 namespace
namespace
{
...;
}