2017-5-17 C++ primer 笔记 (static和extern的区别和用法)

来源:互联网 发布:有什么育儿软件 编辑:程序博客网 时间:2024/06/14 15:54

c++primer笔记

  • 加入光荣的进化吧

第六章! 函数

  • 局部对象
    • 名字有作用域, 对象有生命周期。
      • 名字的作用域是程序文本的一部分,名字在其中可见
      • 对象的生命周期是程序执行过程中该对象存在的一段时间。
    • 形参和函数体内部定义的变量统称为==局部变量==。
      • 仅在函数的作用域内可见,同时局部变量还会==隐藏==在外层作用域中同名的其它所有声明!
  • 局部静态对象!
    • 可以使局部变量的生命周期贯穿函数调用及之后的时间。

- 方法: 将局部变量定义成static类型。

static关键字和extern关键字

  • static是C++ 中常用的修饰符,它被用来控制变量的存贮方式和可见性。
  • extern “C”是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern “C”来说明。
    1. static关键字
      • 修饰局部变量
      • 一般情况下,局部变量存在栈区。并且局部变量的生命周期在该语句块执行结束时便结束了。 但如果用static修饰,该变量便存在静态数据区,其生命周期一直持续到整个程序执行结束。
      • 虽然static修饰的局部变量 生命周期和存储空间发生了变化,但作用域并没有改变。仍然是一个局部变量!
      • 修饰全局变量
      • 对于全局变量,既可以在本源文件中被访问,也可以在同一个工程的其它源文件访问(要用extern声明)
      • 但如果在本源文件中用static修饰,则在同一个工程的其它源文件中无法访问。static改变了全局变量的作用域范围。
      • 修饰函数
      • 情况与修饰全局变量基本一致,改变了函数的作用域!
      • c++中
      • 在C++中如果对类中的某个函数用static修饰,表示该函数属于一个类,而不属于此类的任何特定对象。
      • 如果对类中某个变量进行static修饰,表示该变量为类及其所有的对象所有。他们在存储空间都只存在一个副本,可以通过类和对象去调用。
    2. extern关键字
      • extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。”
      • > 其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。

- ….

- 在头文件中声明,在源文件中定义。

头文件(.h)和源文件(.cpp)都应该写什么?:

  • 头文件(.h)

    • 写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。
    • 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

      #ifndef CIRCLE_H#define CIRCLE_H//你的代码写在这里#endif
    • 这样做是为了防止重复编译,不这样做就有可能出错。

    • 至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。

  • 源文件 (.cpp)
    • 源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。
  • 当源文件和头文件不在同一个目录下时,要在 项目-属性-c/c++-附加包含目录中编辑所在的目录。


  • 参数传递:

    • 当实参拷贝给形参时,他们之间还是独立的对象,此过程被称为值传递。
      • 改变形参不能影响到实参的变化
    • C++最好使用引用类型的形参代替指针!
      • 传参数时直接传数值, 在函数声明中使用引用。能起到类似指针的效果。

    - 如果函数无需改变引用形参的值,最好将其声明为常量引用。

原创粉丝点击