- 函数的参数声明与返回值的定义
在函数声明和定义中,可以直接为参数命名,也可以不命名。
int my_find(vector<string> vs, int hint); //命名参数
int my_find(vector<string> ,int ); //不命名参数,也是可行的
同时,声明的参数在函数体中也是可以不去使用的。
返回值
对于main函数,当执行到main()的末尾而没有返回值时,等价于返回0,意思就是“成功完成”程序。传常量引用
获取参数的地址而不是将直接去拷贝参数传递给函数。这种方法称为引用
void print(const vector<double>& v)//读取vector中的元素
{
cout<<"{";
for(int i=0;i<v.size();i++)
{
cout<<v[i];
if(i!=v.size()-1) cout<<",";
}
cout<<"}\n";
}
& 表示 引用
const则用来阻止print()无意中修改参数的行为。
- 传引用
如果既需要读取,又需要改写,则:
int i = 7;
int& r = i;//int&是一个整型对象的引用
r = 9;
i = 10;
cout<<r<<' '<<i<<'\n';//输出的结果为10 10
也就是说,任何对r的使用实际上都是对i的使用。
- 传指与传引用的对比
void g(int a, int& r, const int& cr)
{
++a;//改变局部变量a,出了函数就没用了
++r;//改变r指向的对象的值
int x = cr;//读入cr指向的对象的值
}
int main()
{
int x = 0;
int y = 0;
int z = 0;
g(x,y,z);//正确,x==0;y==0;z==0;
g(1,2,3);//错误:引用参数r需要指向一个变量
g(1,y,3);//正确:因为cr是常量引用,可以传递一个字面常量
对于g(1,y,3) 在执行时,编译器为函数g()的参数分配了一个整型变量,令cr指向它。
这种编译器生成的对象称为临时对象。
基本原则:
1,使用传值方式传递非常小的对象。
2,使用传常量引用的方式传递不需要修改的大对象。
3,让函数返回一个值,而不是修改通过引用参数传递来的对象。
4,只有在迫不得已时才使用传引用方式。
那到底什么时候使用非常量传引用方式呢?
1,用于操作容器(比如vector)和其他大的对象。
2,用于改变多个对象的函数(函数只能有一个返回值)