标签:静态类 function 字节 结束 提高效率 还需要 自己的 指令 编译
在这一章中要学习以下内容:
C++有一个庞大的有用的函数库(standard ANSI C library + 几个C++类),但是解决实际问题还需要定义我们自己的函数。
当然为了提高效率也需要STL和BOOST这些C++库。
为了使用C++函数,你需要做以下的事情:
下面提供了一个简单的例子
#include <iostream> // function prototype void simple(); int main() { using namespace std; cout << "main() will call the simple() function:\n"; // function call simple(); cout << "main() is finished with the simple() function.\n"; return 0; } // function definition void simple() { using namespace std; cout << "I‘m but a simple function.\n"; }
在main函数和simple函数中都放了一个using指令,是因为每个函数都使用了cout。
函数可以分为两类:
没有返回值的相下面这样
void functionName(parameterList) { statement(s) // return是可选的 return; }
parameterList指定了传递给函数的参数的类型和个数。
可选的返回语句标志着函数的结束。
函数的返回值不能是数组,但可以是数组的指针。
函数是如何返回值的?
一般来说,函数是通过复制返回值到指定的CPU寄存器或者内存位置来返回函数值的。
然后调用者会检查那个位置。
调用函数和被调用函数必须对那个位置上返回类型达成一致。
函数的原型一般都放在include文件中。
#include <iostream> // 无返回值的函数原型 void cheers(int); // 有返回值的函数原型 double cube(double x); int main() { using namespace std; // 函数调用 cheers(5); cout << "Give me a number: "; double side; cin >> side; // 函数调用 double volume = cube(side); cout << "A " << side << "-foot cube has a volume of "; cout << volume << " cubic feet.\n"; cheers(cube(2)); return 0; } void cheers(int n) { using namespace std; for (int i = 0; i < n; i++) cout << "Cheers! "; cout << endl; } double cube(double x) { return x * x * x; }
为什么C++需要函数原型呢?
函数原型向编译器描述了函数接口。
第一,原型告诉了编译器函数应该接受几个以及什么类型的参数。
第二,编译器需要知道要几个字节以及何种类型来解释返回值。没有这些信息,编译器只能靠猜。
为什么C++编译器不去文件后面找函数定义呢?
函数原型是一条语句,所以必须以分号结尾。
函数原型只需要类型信息就够了,参数名是什么、要不要都无所谓,参数名只是起到占位符的作用。
函数原型极大地减少了程序出错的几率。
函数原型可以保证:
函数原型的检查发生在编译器,被称为静态类型检查(static type check)。
C++一般通过值来传递参数(by value)。
数值类型的值会传递给一个新的变量。
通过值传递的参数称为formal argument或者formal parameter。
而传递给函数的值称为actual argument或者actual parameter。
为了简化一点,C++用argument指实际参数,parameter称为形式参数。
在函数中声明的变量,包括parameters,都是函数私有的。
当函数调用的时候,计算机便为这些变量分配内存;当函数结束时,会释放这些变量。
传递给函数的多个参数用逗号分隔。
Functions: C++'s Programming Modules
标签:静态类 function 字节 结束 提高效率 还需要 自己的 指令 编译
原文地址:https://www.cnblogs.com/tuhooo/p/9932462.html