【C++】从入门到精通第一弹——基础知识

2023-11-05 09:10:59 浏览数 (1)

内联函数

常规函数将程序流程转到独立的函数,会耗费大量时间

内联函数用内联代码替换函数调用,会占用大量内存,是以空间换时间。内联函数最主要的功能就是提高程序的运行速度,内联函数主要是编译代码与其他程序代码内联起来。 所以我们要综合去考虑,有选择的使用内联函数。

比如,如果执行函数代码时间比处理函数调用机制的时间长,则节省的时间将只占整个过程的很小一部分。如果执行代码时间非常短,则内联函数代用就可以节省更多的时间。

方法: 在函数声明前加上关键字inline 在函数定义前加上关键字inline 但是在我们使用内联函数时,有时候编译器并不会同意我们使用,因为有的编译器会自动判断函数的大小,如果函数过于复杂或者函数调用了自己,编译器都不会把其当作内联函数的。

inline 工具是c 新增的特性。 C语言中预处理语句# define来提供宏,这是内联函数的开始。但宏的缺点就是宏不能按值传递,所以如果当我们使用c的宏执行了类似函数的功能时,要考虑将其转换为c 的内联函数。

使用内联函数可以减少函数调用带来的开销(在程序所在文件内移动指针寻找调用函数地址带来的开销),但它只是一种解决方案,编译器可以忽略内联的声明。

建议在函数实现代码很简短或者调用该函数次数相对较少的情况下将函数定义为内联函数,数通常定义一条返回语句,不能包含循环或者switch语句。

例如,一个递归函数不能在调用于,一个100行代码的函数也不可能在调用时展开,内联函数只能在优化程序时使用。

在抽计中,它对支持信息隐藏起主要作用。如果某个内联函数要作为外部全局函数,即它将被多个源代码文件使用,那么就把它定义,在每个调用该内联函数的源文件中包含该头文件,这种方法保证对每个内联函数只有一个止在程序的生命期中引起无意的不匹配。

引用变量

引用是已定义的变量的别名。 主要用途是函数的形参,为处理大型函数结构提供便利

代码语言:javascript复制
int rat;
int &ret = rat;

ret代表一种引用变量,是rat的别名,两者所指向的值,地址空间都一样,指向相同的内存单元。 引用需要在定义时就进行初始化, 其实引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就一直效忠于它

代码语言:javascript复制
int & rat = ret;
int *const pt = &ret; 

将引用作为函数参数,使得函数中的变量名成为调用程序中的变量的别名。 指针,引用都可以实现对函数实参的交换,但是值传递的方式不可以交换

代码语言:javascript复制
int &a = 10; //错误写法
int &a = 10 x; //错误写法

应尽可能使用const 理由: 使用const可以避免无意中修改数据编程的错误 使用const使函数能够const和非const实参,否则只能接受非const数据 使用const引用 使函数能够正确生成并使用临时变量

默认参数

默认参数是指当函数调用中省略了实参时自动使用的一个值。

代码语言:javascript复制
int function(int a,int b = 1);

设置默认值一定要从右到左依次添加

代码语言:javascript复制
int function(int a = 1,int b );//不合法

变量存储类别

auto变量

auto(自动)是c 的默认的储存类型,函数内未加存储类型说明的变量都是auto变量。 auto变量的作用域仅仅限于定义在该变量的个体内。在函数定义的auto变量只在该函数中有效,在复合语句中定义的auto变量只在该复合语句中有效。 它是一种动态存储方式,内存分配在栈中,当函数调用结束后就会被自动释放。

static变量

静态变量,在函数调用结束后并不会消失,静态全局变量只能在在该.cpp源文件中使用,在别的.cpp源文件中不可以使用。 static变量的生命周期为整个源程序。在函数中定义的只能在函数中使用,尽管该变量不能再继续使用,但是它还是存在的,当再次调用该函数,又可以继续使用。

extern变量

一个项目有多个源文件,那么extern变量的作用就是,让此源文件中定义的变量,能在别的源文件中使用。

格式控制函数

1)long setf(long f);根据参数f设置相应的格式标志,返回此前的设置。该参数f对应的实参为无名枚举类型中的枚举常量(又称格式化常量),可以同时使用一个或多个常量,每两个常量之间要用按位或操作符连接。如需要左对齐输出,并使数值中的字母大写,则调用该函数的实参为太ios::left|ios::uppercase

2)long unsetf(long f);根据参数f清除相应的格式标志,返回此前的设置。如果要清除此前的左对齐输出设置,恢复默认的右对齐输出设置,则调用该函数的实参为ios::left.

3)int width();返回当前的输出域宽。若返回数值为0,则表明没有为刚才输出的数值设置输出域宽。输出域宽是指输出的值在流中占有的字节数。

4)int width(int w);设置下一个数据值的输出域宽为w,返回为输出上一个数据值规定的域宽,若无规定则返回0。注意,此设置不是一直有效,而只是对下一个输出数据有效。

5)setiosflags(long f);设置f对应的格式标志,功能与setf(long f)成员函数相同,在输出该操作符后返回的是一个输出流。如果采用标准输出流cout输出,则返回cout.输出每个操作符后都是如此,即返回输出它的流,以便向流中继续插入下一个数据。

6)resetiosflags(long f);清除f对应的格式标志,功能与unsetf(long f)成员函数相同。输出后返回一个流。

7)setfill(char c);设置填充字符的ASCII码为c的字符。 8)setprecision(int n)设置浮点数的输出精度为n。 9)setw(int w), 设置下一个数据的输出域宽为w。

语言特点

C 语言的数据类型包括整型、实型、字符型、枚举类型等基本类型,数组、结构体、共用体等构造类型,指针类型,以及用户自定义数据类型。能够实现复杂的数据结构,还可以定类实现面向对象编程,类和指针结合可以实现高效的程序。

C 语言中,运算符十分丰富,共有30多个,如算术、关系、逻辑、位、赋值、指针、条件、逗号、下标、类型转换等。

C 语言的控制语句形式多样,使用方便。包括两路分支、多路分支、循环结构等控制语句,便于结构化模块的实现。结合面向对象编程,更有利于程序的编制和维护。

C 是一种面向对象的程序设计语言,抽象和实际相结合,各对象间使用消息进行通信,通过继承方法增加了代码的复用。

C 语言继承了C语言的特性,可以直接访问地址,进行位运算,从而对硬件进行操作。C 语句具有编写简单、便于理解,以及低级语言与硬件结合紧密的优点。

C 语句具有很强的可移植性,用C 语言编写的程序基本不用修改太多就可以用于不同型号的计算机上,C 标准可在多种操作系统下使用。

0 人点赞