本段测试代码包括如下内容:

(1) 如何访问namespace中声明的名称;
(2) namespace导致的相关冲突;
(3) namespace可嵌套;
(4) 可以在namespace中使用using声明和using编译命令;
(5) 未命名的namespace:其作用域为定义该namespace所在的声明区域。C++推荐用来替代static定义静态变量。

 #include <iostream>

 using namespace std;

 namespace jerry{
int height;
int weight;
void showHeight();
string name;
} //
namespace jerry{
void showHeight()
{
cout<<"Method 3: Jerry height: "<<height<<" kg"<<endl;
}
} namespace elements
{
namespace fire
{
int flame;
using namespace jerry; //(4) can use 'using' in namespace define
using std::cout;
}
float water;
} //(5) no name namespace
//其作用域为定义时所在的声明域,可用来替换static变量,这是C++标准推荐的行为
namespace {
string data;
} void testFun();
int main()
{
cout<<"This code is to test namespace"<<endl;
/*not allowed to define namespace in code segment
//Error
namespace jerry{
int height;
int weight;
}
*/ //(1) To access the data in namespace
//Method 1: 作用域解析符
jerry::height = ;
cout<<"Method 1: Jerry height: " << jerry::height <<" cm"<<endl; //Method 2: using声明
using jerry::weight;
weight = ;
cout<<"Method 2: Jerry weight: " << weight<<" kg"<<endl; //Method 3: using编译指令:All the define data in namespace jerry can be access.
using namespace jerry;
showHeight(); //(2) about name conflict
{
jerry::name = "Jerry";
string name = "Tom";
//using jerry::name; Error
cout << "name: "<<name<<endl;
/*
This method will lead conflict with locall parameter
using jerry::name;
cout << "name: "<<name<<endl;
*/ cout << "name: "<<jerry::name<<endl;
using namespace jerry;
//局部变量会覆盖jerry命名空间的name定义
cout << "name: "<<name<<endl; } //(3) namespace can nest
elements::fire::flame = ;
using namespace elements::fire; //(5) no name namespace
//其作用域为定义时所在的声明域,可用来替换static变量,这是C++标准推荐的行为
data = "hello";
cout<<"No name namespace: data: " << data <<endl;
testFun(); } void testFun()
{ /*not allowed to define namespace in code segment
//Error
namespace jerry{
int height;
int weight;
}
*/ //(5) no name namespace
data = "hello in function";
cout<<"No name namespace: data: " << data <<endl;
}

运行结果为:

[C++] namespace相关语法-LMLPHP

05-11 10:50