与LSGO一起学“第2章 做一个简短的C++程序(2.5 重名问题)”
2016-03-25 19:17
302 查看
2.5
重名问题
上一节通过讲解iostream与iostream.h的区别引出了标准命名空间std,又从标准命名空间了解到所有的标准库函数都在标准命名空间std中定义,而C++之所以引入命名空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名所引起的冲突。
程序演示:
#include<iostream>
namespace a
{
int b=5;
}
namespace c
{
int b=8;
}
int main()
{
using
namespace a;
using
namespace c;
int b=9;
std::cout<<b<<std::endl;
//std::cout<<b<<" "<<a::b<<" "<<c::b<<std::endl;
return 0;
}
using
namespace a;
using
namespace c;
int b=9;
这样我们就有了三个名字为b的变量名,但是它们的值都是不一样的。
假如我们不采用命名空间的话,显然我们是不能这么定义的:
int b = 5;
int b = 8;
int b = 9;
但是假如程序很大,而且不是一个人所写的时候,这样的情况会出现很多,C++的解决方法是采用命名空间,本节的程序采用了命名空间后,三个同名的变量b由于处于不同的命名空间中,因此它们不会产生冲突。
//int b=9;
std::cout<<b<<std::endl;
b这个符号引起了歧义。
编译器不知该输出哪个b。
因此终止编译并显示一条错误信息。
关于命名空间的具体作用在第二十二章“命名空间”将会有更详细的介绍,这里只需了解即可。
重名问题
上一节通过讲解iostream与iostream.h的区别引出了标准命名空间std,又从标准命名空间了解到所有的标准库函数都在标准命名空间std中定义,而C++之所以引入命名空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名所引起的冲突。
程序演示:
#include<iostream>
namespace a
{
int b=5;
}
namespace c
{
int b=8;
}
int main()
{
using
namespace a;
using
namespace c;
int b=9;
std::cout<<b<<std::endl;
//std::cout<<b<<" "<<a::b<<" "<<c::b<<std::endl;
return 0;
}
using
namespace a;
using
namespace c;
int b=9;
这样我们就有了三个名字为b的变量名,但是它们的值都是不一样的。
假如我们不采用命名空间的话,显然我们是不能这么定义的:
int b = 5;
int b = 8;
int b = 9;
但是假如程序很大,而且不是一个人所写的时候,这样的情况会出现很多,C++的解决方法是采用命名空间,本节的程序采用了命名空间后,三个同名的变量b由于处于不同的命名空间中,因此它们不会产生冲突。
//int b=9;
std::cout<<b<<std::endl;
b这个符号引起了歧义。
编译器不知该输出哪个b。
因此终止编译并显示一条错误信息。
关于命名空间的具体作用在第二十二章“命名空间”将会有更详细的介绍,这里只需了解即可。
相关文章推荐
- 与LSGO一起学“第2章 做一个简短的C++程序(2.6 注释)”
- 与LSGO一起学“第2章 做一个简短的C++程序(2.4 iostream与iostream.h的区别)”
- 与LSGO一起学“第2章 做一个简短的C++程序(2.3 std::介绍)”
- 与LSGO一起学“第2章 做一个简短的C++程序(2.2 输出语句的使用)”
- 与LSGO一起学“第2章 做一个简短的C++程序(2.1简单的屏幕输出小程序)”
- C语言:单链表实现(二) 就地逆置,就地归并
- C++学习之:括号匹配与栈的使用
- c语言字符串-常用操作(3) 字符串 翻转
- 设计模式--抽象工厂模式C++实现
- C++练习题目记录
- C++中虚继承的作用
- c++:改造cmdline用于MSVC下的命令行参数解析
- xcode7编译错误之缺少libc++.dylib
- c++ 基础知识
- windows下c/c++编程实现 贪吃蛇简易版
- VS2010环境下,c++嵌入Python环境配置问题
- 浅谈C/C++内存泄露及其检测工具
- c++中冒号(:)和双冒号(::)的用法
- C++ 学习二
- C++的杂项知识点~