<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文件中进行定义。可以避免重复的编译,也更便于管理。

浙公网安备 33010602011771号