c++的命名空间
namespace(命名空间/名字空间)
因为在C++中只有一个全局作用域,所以标识符之间可能发生冲突。
因此C++中提出了命名空间的概念:
命名空间将全局作用域分成不同的部分;不同命名空间中的标识符可以同名而不会发生冲突,当然命名空间可以发生嵌套;
此外,全局作用域是默认命名空间。
| C++命名空间的使用: |
|---|
| 使用整个命名空间:using namespace name; |
| 使用命名空间中的变量:using name::variable |
| 使用默认命名空间中的变量: ::variable |
Example:
#include <stdio.h>
#include <iostream>
namespace First
{
int i = 0;
}
namespace Second
{
int i = 1;
namespace Internal //嵌套命名空间
{
struct P //嵌套命名空间
{
int x;
int y;
};
} // namespace Internal
} // namespace Second
int main()
{
using namespace First; //使用整个命名空间
using Second::Internal::P; //使用嵌套的命名空间
printf("First::i = %d\n", i);
printf("Second::i = %d\n", Second::i); //使用命名空间中的变量
P p = {2, 3};
printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y);
system("pause");
return 0;
}
编译运行,输出结果:

可以使用using namespace指令避免使用名称空间前置。该指令告诉编译器后续代码正在使用指定命名空间中的名称。
#include <iostream>
using namespace std;
// first name space
namespace first_space
{
void func()
{
cout << "Inside first_space" << endl;
}
} // namespace first_space
// second name space
namespace second_space
{
void func()
{
cout << "Inside second_space" << endl;
}
} // namespace second_space
using namespace first_space;
int main()
{
// This calls function from first name space.
func();
return 0;
}
编译运行,输出结果:

#define 、 typedef 和 using
| #define |
#define是一个预处理指示符 用来定义“宏”。编译器不做类型检查 语法:#define MACRONAME Something |
|
| typedef |
创建能在任何位置替代类型名的别名 语法:typedef Some Type NewTypeName |
|
| using |
语法:using identifier = type-id
|
|
转载请注明出处:https://www.cnblogs.com/stu-jyj3621

浙公网安备 33010602011771号