//内存 栈区 与 static区 ,C++为了兼容C,#include 只是文本替换,导致一堆命名空间之间的复杂问题,倍受人诟病

extern  关键字

1.基本含义:意如其名,告诉编译器声明的东西是外部的。

特殊用法  extern "C" + 函数,声明这个函数翻译优化的时候 函数名 不改变(c++因为多态等原因,会改变函数名)

2. 声明变量用法:

 (1) 1.c 中 char a[6];  2.c 中 extern char a[];

(2)   1.c 中 char a[6];1.h中 extern char a[];  2.c中 #include ''1.h" 即可访问 a;(以头文件声明,来代替每次在其他文件中声明)

(3) 1.c 中              ;1.h中 extern char a[6]="123456"; ; 2.c中 #inlcude “1.h” 会报错 (定义会覆盖extern关键字,显示重复定义)

3.声明函数变量用法

最好参考2中(2) 用法,这样后面 函数参数修改 后,编译期间会报错

//////////////////////////////////////////////////////////////////////////////////////////////////////

static 关键字

extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.

1.基本含义:意如其名,表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.

static 类似于隐藏,声明即需要定义,只有一个副本,只能在本身的编译单元内使用

extern部分 2 中(3)方法若将extern 替换成 static ,则可以编译通过,此时在2个编译单元中 都有一份 副本(互不相干);但是会带来很多问题,

因此 static 声明与定义 一般放在 .c 文件中

2. c语言中使用

修饰变量,函数  同 1 中说明

修饰 函数中变量,这个比较特殊,肯定是放在静态区,生命周期是到程序结束!!

3. c++语言中使用,主要是类中

修饰成员变量,成员函数 属于类所有,一个副本

/////////////////////////////////////////////////

const 关键字

1. const 自带属性 是 static 声明即需要定义,只有一个副本,只能在本编译单元内使用

2. extern const 属性 是 extern

3. const int * const p ;

4. 给定一个 类 class A,可能存在使用const的地方,第一行编号为 1,2,3,4,5,6,第二行编号为11,22,33,44,55,66

A a1(类变量),           普通成员函数    , 普通类成员  , 普通成员  ,   普通函数参数   ,  普通返回参数

const A a1(类常变量);const 成员函数 ;const 类成员, const 成员,   const函数参数  , const 返回参数

普通成员函数 表示,我将要修改调用该函数的对象的数据

const成员函数 表示,  不会修改调用该函数的对象的数据  (实在要修改,可以将某个成员变量设定为 mutable )

正确的访问逻辑是:

const成员函数 可以访问一切,普通成员函数不能访问 const对象任何成员

const类对象 只能访问 const成员函数,普通类对象 可以访问一切

const成员,必须在初始化列表中初始化

作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改, 应尽可能将该成员函数声明为const成员函数

5 const &: 把不变的给 可变 的是有问题的

///////////////////////////////////////

volatile : 防止编译器优化,有点复杂

C++几个重要关键字(包含借鉴其他博主的东西)的更多相关文章

  1. Emacs Helm: 使用关键字搜索、获取、执行任何东西

    Helm 是一个emacs的软件包,定义了一个通用框架,交互式地.动态缩减式地使用关键字选择.获取.执行任何东西.比如: 执行emacs 命令 打开文件 查看man文档 执行grep操作 执行apt命 ...

  2. 织梦dedecms后台文章搜索关键字,关键字包含文章内容的代码修改

    1.织梦dedecms后台文章搜索功能在哪里找?织梦dedecms后台-->核心-->常用操作-->所有档案列表(或)织梦dedecms后台-->核心-->内容管理--& ...

  3. 转:C语言中volatile关键字的作用 专家博客

    源地址:http://blog.csdn.net/tigerjibo/article/details/7427366 一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整 ...

  4. Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  5. 谈 CSS 模块化

    以前看过模块化的相关资料以及解释,对模块化有了一个表皮的了解,自己也做了一些相关的实践,由于接触到的项目交小,所以也没能更好的去体现和理解模块化,但总体还是有那么一些感悟,但是如果要说怎么才能算是好的 ...

  6. 团队作业-Alpha版本发布2

    团队项目-系统设计 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/homework 这个作业要 ...

  7. C++ Virtual

    摘自:http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html namespace QCAR { /// Area is the ...

  8. Kaggle:Home Credit Default Risk 数据探索及可视化(1)

    最近博主在做个 kaggle 竞赛,有个 Kernel 的数据探索分析非常值得借鉴,博主也学习了一波操作,搬运过来借鉴,原链接如下: https://www.kaggle.com/willkoehrs ...

  9. Androidn Notification的使用,解决找不到setLatestEventInfo方法

    转自:http://blog.csdn.net/songyachao/article/details/51245370#comments 今天使用4.0.3使用 Notification notifi ...

随机推荐

  1. maven入门安装及HelloWorld实现

    一.安装maven 1.下载    https://maven.apache.org/download.cgi     官网进行下载 2.安装 2.1  解压 本人在D盘建立一个maven文件夹,然后 ...

  2. Docker的常用命令

    docker命令有很多,总的分为以下几大类: 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 — doc ...

  3. KVM CPU线程等学习记录

    绝大多数操作系统调度单位是线程.线程是调度和分配的基本单位,进程是资源拥有的基本单位.linux下fork的叫进程pthread叫线程创建进程比线程性能要差好多5-100倍,因进程不同而异.进程之间共 ...

  4. JS中 == ,===, !=, !==的区别

    一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. === 判断规则 如果类型不同,就[不相等]  如果两个都是数值,并且是同一个值,那么[相等]:(!例外 ...

  5. dns 域名地址

    Public DNS+ 是属于 腾讯云旗下的公共 DNS 服务.拥有 80 多条国内线路和 4 条海外线路,有 BGP Anycast 技术,也是国内首家支持谷歌 ECS (edns-client-s ...

  6. selenium元素定位Xpath,Contains,CssSelector

    最近有人问到定位问题,基本上我用以下三个方法可解决,但不同的项目使用方法不一样.以下为自己所用的简单记录说明 1.Xpath 经常使用且最能解决问题的定位 driver.findElement(By. ...

  7. vim more

      启用鼠标 :set mouse=a 跳转到下一函数 下一个函数开头 ]] 当前函数末尾/下一个函数的末尾 ][ 当前函数开头/上一个函数的开头 [[ 选项可以按任何顺序生效,可以放在文件名前或后边 ...

  8. redis 连接超时。。

    在虚拟机安装后.在项目中加入redis 想测试一下功能 然后在物理机死活连不上. 1.用物理机ping 虚拟机的IP 通.... 2.然后.把redis.conf 里面bind 0.0.0.0 依然没 ...

  9. 自定义UITableViewCell上的delete按钮

    http://blog.csdn.net/xiaoxuan415315/article/details/7834940

  10. JAVA操作字符串

    package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* ...