<C++学习十七>函数基础

摘要: 本篇博客仅作为笔记,如有侵权,请联系,立即删除(网上找博客学习,然后手记笔记,因纸质笔记不便保存,所以保存到网络笔记)。

一、C++之局部对象

  1、自动对象

  默认情况下,局部变量的生命周期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次被调用函数时创建和撤销。该类型局部变量存储在栈上,在动态存储区。

  局部变量所对应的自动对象在函数控制经过变量定义语句创建。如果在定义时提供了初始化,那么每次创建对象时,对象都会被赋予指定的初值。对于未初始化的内置类型局部变量,其初始值不确定。当函数调用时,自动对象就会被撤销。

  2、静态局部对象

  用static关键字修饰的局部变量。静态局部变量存储在静态存储区,生命期贯穿整个运行期间。作用域同自动局部变量。

二、C++之分离式编译

  1、namespace和class

  命名空间和类,非常相似,比如:

  std::cout和A::f(),都用到了作用域符,都可以防止重名函数,可以更好的支持多人编译。但有以下几点不同:

  (1)namespace可以写在多个不同的文件中,而class只能在一个文件中。

  (2)如果想使用A类中的函数A::f(),需要建立一个类的实例(静态函数等除外),而namespace则相当于本身就是一个建立好的实例,可以直接调用函数。

  除此之外,可以将命名空间看做特殊的类。

  需要注意的是千万不要在h文件中使用using namespace,否则整个文件都会带上。

  2、.h文件和.cpp文件

  首先要知道的是两种文件的最大匹配:

  编译器将所有.cpp文件编译为.obj文件再串联起来。如果.cpp中有#include X.h文件,那么第一步预处理会把X.h代码粘粘到.cpp中代替#include语句。

  基于这个特性,显然我们include同一工程下的cpp文件,那么会将该.cpp文件重复两次(一次是本身的编译,一次是include的复制)。因此,.cpp文件不适合进行#include

  而我们往往需要一个.cpp文件中include很多其他文件代码,那么这时候就需要.h文件(.h是目录,.cpp是内容)。

  声明和定义的区别:

  如果声明了一个函数,在汇编语言中就会通过call语句等在全局中寻找这个函数,只需要这个函数在别的.cpp文件中有定义就可以了,而不需要当时就定义。

  对变量也是这样,当想使用一个别处定义的变量时,首先要声明,使得该名字为程序所知。(使用extern或设置成全局变量直接使用)。

  因此,在.h中进行声明,在.cpp文件中进行定义。可以避免重复的编译,也更便于管理。

posted @ 2019-01-09 09:10  daisy_ai  阅读(120)  评论(0)    收藏  举报