一些零散的c++知识

简介: 由于在定义函数时指定它为内置函数,因此编译系统在遇到函数调用max(i,j,k)时,就用max的函数体代替了它,同时将实参代替形参。

一,标准输入输出流的控制符    


bfd3d15273b84c12a0159fe98576f149.jpg


***如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomainp头文件。


1.


bb85a88933a149b4bf625d0cd4e907d0.png


c++中cout默认精度为六位,且编译器自动帮你四舍五入。


2.两个案例帮你搞懂这些东西。


ca90a645dbba4cadb238c091a5cbd306.png


5ede0bdca0414fb1b893367bed2f3a96.jpg


二,内置函数


1.


62b137e93b3e457daef703a16b14717d.jpg


如果有的函数需要频繁使用,则所用时间会很长,从而降低程序的执行效率。有些实用程序对效率是有要求的,要求系统的响应时间短。


所以,c++提供了一种提高效率的方法,即在编译时将所调用的函数代码直接嵌入到主调函数中,而不是将流程转出去。


方法很简单,就是在函数首行的左端加上inline。


#define _CRT_SECURE_NO_WARNINGS 1
#include<iomanip>
#include<iostream>
using namespace std;
inline int max(int, int, int);
int main() {
  int i = 10, j = 20, k = 30, m;
  m = max(i, j, k);
  cout << "max = " << m << endl;
  return 0;
}
inline int max(int a, int b, int c) {
  if (b > a)
    a = b;
  if (c > a)
    a = c;
  return a;
}


由于在定义函数时指定它为内置函数,因此编译系统在遇到函数调用max(i,j,k)时,就用max的函数体代替了它,同时将实参代替形参。


2.优缺点:


使用内置函数可以节省运行时间,但是增加了目标程序的长度。在函数规模很小的情况下,函数调用的时间开销可能超过执行函数本身的时间,把它定义为内置函数,可大大减少程序运行时间。


3.内置函数不能包括复杂的控制语句,如循环语句和switch语句。


对函数inline声明,知识程序设计者对编译系统提出的一个建议,也就是说,这只是建议性的,不是指令性的。编译器会根据实际情况来决定是否要这样做,如果不适用,此时编译系统会忽略inline声明,而按普通函数处理。


所以,只有那些规模较小而又被频繁调用的简单函数,才适合于声明为inline函数。


三,c++变量的属性


c++变量的属性除了有数据类型的属性外,还有存储类别的属性。存储类别指的是数据在内存中的存储方法。


存储方法分为:静态存储和动态存储


存储类别有四种:自动的(auto),静态的(static),寄存器的(register),外部的(extern);


1.自动变量


函数中的局部变量,如果不用关键字static加以声明,编译系统对他们是动态的分配存储空间的。(例如函数体中的变量在函数结束后释放和复合语句中的变量在复合语句结束后释放)。


存储类别auto和数据类型名的顺序任意。即下列都可。


int auto a;
auto int a;


关键字auto可以不写,如果不写auto,则系统把它默认为自动存储类别,它属于动态存储方式。


2.用static声明静态局部变量


有时候希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占有的存储单元不释放,在下一次函数调用时,该变量上一次函数调用结束时的值。


***对静态局部变量的说明:


1)静态局部变量是在静态存储区内分配存储单元。在程序整个运行期间都不释放。


2)对静态局部变量是在编译时赋初值的,即只赋初值一次。在程序运行时它已有初值。以后每次调用函数时不在重新赋值而只是保留上一次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。


3)如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自定赋初值0(对数值型变量)或空字符(也是0)(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元的值是不确定的。


4)虽然静态局部变量在函数调用结束后依然存在,但其他函数是不能引用它的,也就是说,在其他函数中他是不可见的。


**什么时候用静态局部变量呢?


1)在需要保留函数上一次调用结束的值时


2)如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便,避免每次调用时重新赋值。


3.用register声明寄存器变量


1acd60a0ebf24bb897a2e9f50d463ba9.jpg


对此只做了解即可。


4.用extern声明外部变量


全局变量(外部变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域中,全局变量可以为本文件中各个函数所引用。编译时将全局变量分配在静态存储区。


有时需要用extern来声明全局变量,以扩展全局变量的作用域。


全局变量的使用:

1)在一个文件内声明全局变量


1200027878c94a8f843abbb80c0bc8ba.jpg


2)在多文件的程序中声明外部变量


一个c++程序可以由一个或多个源程序文件组成。如果程序由多个源程序文件组成,且都要用到一个变量obj,不能在多个源程序文件中定义obj,而是在某一个源程序文件中定义obj后,然后在其他文件中用extern对obj作外部变量声明。


5.用static声明静态外部变量


有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用,这时可以在定义外部变量时加一个static声明。


需要指出的是:不要误认为用static声明的外部变量才采用静态存储方式(存放在静态存储区中),而不加static的是动态存储(存放在动态存储区)。实际上,两种形式的外部变量都用静态存储方式,只是作用范围不同而已,都是在编译时分配内存。


b228c6fe678c4cc49eac4dc0bbfeb79a.jpg


四,关于变量的定义和声明


首先,函数的声明是函数的原型,而函数的定义是函数功能的确立。


dd2ae83f347742398655bb33a06ffe25.jpg


五,头文件的内容


1,对类型的声明


2.函数声明


3,内置函数的定义                由于内置函数的代码是要插入用户程序中的,因此它应当与调用它的语句在同一文件中,而不能分别在不同的文件中。


4,宏定义                用#define定义的符号常量和用const声明的常变量


5,全局变量定义


6.外部变量定义


7,还可以根据需要包含其他头文件


***由于有了#include指令,就可以把不同的文件组合在一起,形成一个文件,因此说,头文件是源文件之间的接口。


今天就讲这么多了,比较基础,也比较重要。

目录
相关文章
|
存储 数据采集 XML
再谈主数据管理|一文读懂主数据项目实施
主数据管理是企业改善其关键数据资产(如产品数据,资产数据,客户数据,位置数据等)的一致性和质量的必要数据管理活动。
|
8月前
|
项目管理
软件项目管理应从源头开始
软件项目的源头是软件产品本身
C++零碎概念介绍
C++零碎概念介绍
24张图,九大数据结构安排得明明白白
数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。
|
SQL 存储 关系型数据库
零散的MySQL基础
MySQL基础语法
108 0
零散的MySQL基础
|
C++
c++零散知识点
如果在类体外定义inline函数,则必须讲类定义和成员函数定义都放在同一个头文件里面(或写在同一个源程序文件中)否则编译时无法进行置换(将函数代码得拷贝嵌入到函数调用点中)
111 0
|
编译器 C语言 C++
C/C++零散知识点汇总
C/C++零散知识点汇总
|
人工智能 算法 C++
C++ 基础复习系列4(零散资料总结)
C++ 基础复习系列4(零散资料总结)
C++ 基础复习系列4(零散资料总结)
|
存储 缓存 算法
24张图,九大数据结构安排得明明白白!
数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。本文将为大家详细介绍九大数据结构。
913 0
24张图,九大数据结构安排得明明白白!