C++中库函数的应用

天在看apache和nginx的区别,其中看到了一个是这样的:apache支持静态和动态编译;而nginx只支持静态编译。

   那么什么是动态编译,什么又是静态编译呢,特地拿出了《鸟哥的linux私房菜》,特把重点总结如下。

   依据一个函数库**是否被编译到程序内部**可以把函数库分为两种:动态函数库和静态函数库:
    1. 静态函数库
      一般扩展名为(.a),这类的函数库通常扩展名为libxxx.a 。
      这类函数库在编译的时候会直接整合到程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数哭的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。

    2. 动态函数库
      动态函数库的扩展名一般为(.so),这类函数库通常名为libxxx.so 。
      与静态函数库被整个捕捉到程序中不同,动态函数库在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用;也就是说可执行文件无法单独运行。

      综上可以知道,静态函数库可能都是源代码,而动态函数库本身就可能是一个可执行文件。

      前言

      函数又叫做功能,就是将一个功能的一堆实现代码封装到一起,而它的作用就是通过简单的一条语句就可以使用这个功能,而不需要知道代码怎样写。

      举个例子,std::sqrt()函数的功能是:求一个数的根。std是前面提到的命名空间,而sqrt就是这个函数的名字,这个函数在cmath标准库中。可以用下面的形式使用这个功能:

      std::sqrt(100);
      

      像上面这样使用函数的功能,就叫做调用函数。上面代码中,100作为函数参数传给函数,让函数来计算它的运算结果。

      std::sqrt()函数是用来求根的,所以会有计算结果,可以用下面代码输出计算结果:

      std::cout << std::sqrt(100) << std::endl;
      

      函数的计算结果叫做返回值。当然也可以用变量来保存返回值:

      double root = std::sqrt(100);
      

      而整个过程,你都不需要考虑std::sqrt()函数里面的代码是怎样写的,这就是函数的作用。

      C++中的标准库(包含C语言的函数库)有很多非常有用的函数。

      调用函数

      C++标准库中有很多非常有用的函数,当然,如果想提高水平不妨尝试以下实现标准库的功能。但是实际工程中,建议能使用标准库就不要自己再写一个。因为,你手写一个需要时间,调用不需要;而且你不留意还会写出bug;还有,标准库里的东西编译器都会有优化,你写的不一定会比标准库里的快。

      如果你调用的函数不是自己写的,那你就需要知道函数怎么调用,函数需要的参数应该怎么填。

      例如标准库cmath中的函数std::abs(),它是用来求绝对值的,它只有一个参数而且这个参数只能接收数值,它会将这个参数转换成绝对值,然后通过返回值返回。

      #include <cmath> // std::abs
      #include <iostream> // std::cout std::endl
      
      int main(void)
      {
          std::cout << std::abs(-100) << std::endl;
          return 0;
      }
      

      输出结果:

      100
      

      对于标准库里的函数,可以参考我在第一篇教程中提到的两个说明文档,也可以在网上找资料。

      注意:C++可以调用C语言的标准库,但是C语言的标准库在C++中是弃用的,即不推荐使用。如:C++标准库cmath对应C语言的标准库是math.h。就是说,建议调用cmath而不是math.h

      巩固练习

      1. 从终端输入一个数,代表弧度,然后输出这个弧度的cossintan的值。可以使用std::cos()std::sin()std::tan(),这三个函数都在cmath标准库中。
      2. 从终端输入一个数,代表角度,然后使用std::cos()std::sin()std::tan()计算出这个角度对应的值。
      3. 输入一个数,使用std::pow()函数求这个数的平方和立方。std::pow()函数在cmath标准库中。
posted @ 2021-02-19 12:09  苏谷龙  阅读(128)  评论(0编辑  收藏  举报