命名空间 extern的用法 static全局变量
std是标准库中的命名空间;
关于extern的用法可以参考文献http://blog.163.com/sunjinxia%40126/blog/static/9498487920131214502107/,讲解的非常清晰
这里有一个关于static全局变量的讲解http://www.360doc.com/content/16/0115/15/15947598_528164347.shtml
引用一个定义在其它模块的全局变量或函数(如,全局函数或变量定义在A模块,B欲引用)有两种方法,一、B模块中include模块A的头文件。二、模块B中对欲引用的模块A的变量或函数重新声明一遍,并前加extern关键字。
被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;
如果在模块A中函数声明了foo为extern "C"类型,而模块B中包含的是extern int foo( int x, int y ) ,则模块B找不到模块A中的函数,模块B应该用#include "moduleA.h",这样做的结果就是:
为解决c++标准库中的标识符与程序中的全局标识符之间以及不同库中的标识符之间的同名冲突,标准c++库的所有标识符都定义在
一个名为std的命名空间中。如下所示:

引入命名空间的原因:
命名空间是ANSI c++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。
在c++程序中,有大量的变量、函数和类名,如果它们搜存在于同一个全局命名空间中,会导致很多冲突。
1. 自定义函数与标准库函数 函数重名
2.程序中使用的名字与第三方库中名称相同
3.同一项目不同模块(可能由不同程序员负责)中名字冲突
命名空间的机制,对于声明于其中的名称都进行了本地化:
相同的名称可以在不同的上下文中使用,而不会引起名称的冲突;
c++中的标准库被定义到std命名空间中,减少了与用户自定义名称的冲突;
在自己的程序中创建自己的命名空间,避免本地化的名称与外界冲突。
在有冲突的情况下,假如我们自定义过的命名空间 name1和name2中都有标识符name,name在同一个程序中使用的时候就要这样:
name1::name
name2::name
而不能在开头用using namespace name1;using namespace name2;了!!
命名空间的使用:
自定义命名空间的时候把一些全局实体分别放在各个命名空间中进行分隔,建立一些互相分隔的作用域,以免产生名字冲突:
namespace ns2//指定命名空间ns1
{
int a;
double b;
class Table{
......
}
namespace ns1
{int age;}
}
引用的时候就是ns2::ns1::age
1.声明一个命名空间:
namespace 命名空间名
{声明}
命名空间中的声明部分可以包括下面的类型:
变量(可以带有初始化)及常量
函数(可以是定义或声明)
结构体
类
模板
命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间)
2. 简化使用命名空间成员的机制
(1)使用命名空间别名
namespace TV=Television;//TV等同Television
这样在使用Television的时候就可以用TV了。
(2)使用格式:using 命名空间成员名
比如:using ns1::Student;//Student等同ns1::Student
(3)使用:using namespace 命名空间名(容易产生重名冲突)
重名问题的解决:
1. 修改本地名字
2. 加上全局限定符,使用::。 比如 ::distance,这样写的原因是当::前面没有任何名字的时候仅仅表示后面的名字是当前程序本地中的全局变量!!
3. 去掉冲突的外部的命名空间,让步于本地的名字,当本地要使用外部命名空间中的其他的标识符的时候,用::比如:std::cout
命名空间 extern的用法 static全局变量的更多相关文章
- 《OOC》笔记(1)——C语言const、static和extern的用法
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...
- static和extern的用法小结
以前写程序是,基本不管static和extern,一个工程文件也只有一个c文件.今天尝试用多个文件来写,自然就涉及到这两个关键词的使用,自己查了些资料,并且做了些实验,总结如下. extern的用法 ...
- extern "c"用法解析
转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...
- extern "C" 用法解析
extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...
- 变量的声明和定义以及extern的用法
变量的声明和定义以及extern的用法 变量的声明不同于变量的定义,这一点往往容易让人混淆. l 变量 ...
- extern的用法
extern作为外部函数声明的用法: 1. 可以扩展函数的应用范围: 107.h #ifndef _107H_ #def _107H_ extern void func(); #endif 107.c ...
- static全局变量与普通全局变量的区别,static局部变量与普通局部变量的区别,static函数与普通函数的区别
static全局变量与普通全局变量的区别 static全局变量和普通全局变量的存储方式没有不同,如果它们都已经初始化,那么存放在进程的数据段中,否则存放在bss段.这两者的不同点在于作用域不同,当一个 ...
- C++基础--extern的用法
extern作为外部变量扩展的用法: 1. 主要作用是扩展变量或者函数的应用范围: 2. extern的用法是相对于全局变量而言: 3. 在看到extern这个关键字的时候说明这个变量已经在别的源文件 ...
- 关于extern的用法
extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...
随机推荐
- 关于JVM的一些冷知识
(1) Java加载类的一般顺序: 1.静态属性,静态方法声明,静态块. 2.动态属性,普通方法声明,构造块. 3.构造方法. 当加载一个类时,JVM会根据属性的数据类型第一时间赋默认值(一举生成的) ...
- 第一节《Git初始化》
创建版本库以及第一次提交 首先我看查看一下git的版本,本地的git是用的yum安装方式,如果想使用源码安装请参考官方文档. [root@git ~]# git --versiongit versio ...
- phpmyadmin nginx设置
1,解压缩phpmyadmin4.2.8压缩包到/usr/local/phpMyAdmin 2,复制config.sample.inc.php为config.inc.php 3,修改nginx.con ...
- 记录一次mysql查询速度慢造成CPU使用率很高情况
1.某日zabbix告警,某台机器CPU使用率过高. 查看慢查询日志,看到很多sql语句都超过10秒 把sql语句拿出来放在查询窗口执行.前面加上explain就可以查看详细查询信息 playcode ...
- SSH原理及操作
1:公钥与私钥(public and private key) 公钥:提供给远程主机进行数据加密的行为 私钥:远程主机收到客户端使用公钥加密数据后,在本地端使用私钥来解密 2:公钥与私钥进行数据传输时 ...
- shell(3)拼写检查与词典操作
1:Linux下,在/usr/share/dict下包含了词典文件,检查一个单词是否在词典里: #!/bin/bash #文件名:checkout.sh #检查给定的单词是否为词典中的单词 word= ...
- Dockerfile之nginx(六)
一.Dokcerfile的基本指令 1)From 指定构建镜像的基础镜像 2)MAINTAINER 指定镜像的作者 3)RUN 使用前一条指令创建的镜像生产容器,并在容器中执行命令,执行结束后会自 ...
- Bootstrap格式转换代码
网址:http://www.w3cschool.cc/bootstrap/bootstrap-responsive-utilities.html <div class="contain ...
- 查看mysql的版本号
查看mysql的版本号 1.1 在命令行登录mysql,即可看到mysql的版本号 [root@heyong ~]# mysql -uroot -p Enter password: Welcome t ...
- 读书笔记——《redis入门指南(第2版)》第四章 进阶——4.1-5
.1事务 redis中事务是一组命令的集合. 事务同命令一样都是redis的最小执行单位,Redis保证一个事务中的命令要么都执行,要么都不执行.如果redisClient在发送EXEC命令前掉线,则 ...