/*
文件中没有引入标准的std,需要程序员手工的写
如果不写using namespace std; 但是写了#include "iostream"
需要显示的引入std(命名空间名)
*/
#if 1
void test()
{
//如果注释掉 using namespace std;
//cout << "hello world" << endl;//
std::cout << "hello world" << std::endl;
}
#endif
//定义命名空间
#if 1
/*
C中的命名空间
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
C++中提出了命名空间的概念
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
C++命名空间的定义:
namespace name { .... }
C++命名空间的使用:
使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间中的变量:::variable
默认情况下可以直接使用默 认命名空间中的所有标识符
结论
1) 当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。
2) c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
3) C++命名空间的定义: namespace name { … }
4) using namespace NameSpaceA;
5) namespce定义可嵌套。
*/
namespace namespaceA
{
int a = 10;
}
namespace namespaceB
{
int a = 100;
namespace namespaceC//命名空间的嵌套
{
struct Teacher
{
char name[32];
int age;
};
}
}
void test()
{
using namespace namespaceA;
using namespace namespaceB;
//cout << a << end;//编译器提示不明确
cout << namespaceA::a << endl;
cout << namespaceB::a << endl;
#if 0
//显示的写全
{
//显示的使用命名空间namespaceC 的Teacher这个数据类型
namespaceB::namespaceC::Teacher t1;
t1.age = 33;
cout << "t1.age = " << t1.age << endl;
}
#endif
using namespaceB::namespaceC::Teacher;
Teacher t2;
t2.age = 36;
cout << "t2.age = " << t2.age << endl;
}
#endif