必备技能5.5:在表达式中使用函数
在前面的示例中,box()函数的返回值被赋值给了一个变量,然后通过使用cout语句输出了变量的值。这样做虽然是正确的,但是我们可以在cout语句中直接使用函数的返回值来重写这个程序,这样程序的效率会更高。例如,前面程序中的main()函数可以按照下面的方式被重写:
int main()
{
//直接使用box()函数的返回值
cout << "The volume is " << box(10.1, 11.2, 3.3);
return 0;
}
在执行上面的cout语句的时候,box()函数会被自动调用并获取到它的返回值,然后输出。没有必要先把函数的值赋值给一个变量。
通常来说,有返回值的函数可以在任何表达式中使用。当计算表达式值的时候,函数会被自动调用,以便获取函数的值。例如,下面的程序把三个盒子的体积相累加,然后输出平均体积。
#include <iostream>
using namespace std;
//使用double类型的数据
double box(double length, double width, double height);
int main()
{
double sum;
sum = box(10.1,11.2,3.3) + box(5.5, 6.6, 7.7) + box(4.0, 5.0, 8.0);
cout << "The sum of the volumes is " << sum << "\n";
cout << "The average volume is " << sum / 3.0 << "\n";
return 0;
}
double box(double length, double width, double height)
{
return length * width * height;
}
程序的输出结果如下:
The sum of the volumes is 812.806
The average volume is 270.935
练习:
1. 写出return语句的两种形式。
2. void 类型的函数是否可以返回数值?
3. 函数是否可以作为表达式中的一部分?
作用域
到目前为止,我们一直都在使用变量,但是却没有讨论过在什么地方可以声明变量,如何确定变量的生存期,以及程序的哪些部分可以访问这些变量。这些属性是由C++中的作用域规则来确定的。
通常情况下,语言中的作用域规则确定了对象的可见性以及对象的生存周期。
尽管C++中定义了很好的作用域系统,但是基础的只有两个:局部的和全局的。在这两个范围中,我们都可以声明变量。在本小节中,我们会看到在局部范围中声明的变量和在全局范围中声明的变量有什么区别,它们之间又有着什么联系?