推荐形参使用常量引用:void func(const T &);

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐形参使用常量引用:void func(const T &);相关的知识,希望对你有一定的参考价值。

一、声明为const的原因:

  • 把函数不会改变的形参定义成普通的引用会带给函数的调用者一种误导,即函数可以修改它的实参的值;
  • 限制函数所能接受的实参类型,如不能把const对象、字面值或者需要类型转换的对象传递给普通引用的实参。

举例:对于附录中的“find_char函数”,由于我们把其中的string类型的形参定义成普通的string&,故只能将find_char函数作用于string对象,对于下面这样的调用,将在编译时发生错误。

	find_char("Hello World", ‘o‘);

 

二、声明为引用的原因:

避免拷贝,除了考虑效率问题,某些类型并不支持拷贝操作,此时只能使用引用形参

使用引用形参可返回额外信息

 

三、注意事项

const形参的顶层const将被忽略,故要注意不要如下重载函数:

void func(const int x)      // 顶层const
{
    cout << x << endl;
}
 
/*
void func(int x)
{
    cout << x << endl;
}
*/

解释:因为顶层const将被忽略,我们传入两个func函数的实参可以完全一样,这样编译器将不知调用哪个函数。 

 

附录:

【find_char程序】

#include <iostream>
#include <string>

using namespace std;

string::size_type find_char(string &s, char c)
{
	int ret = s.size();				// 最大索引值 + 1 
	return ret = s.find(c);
}

int main()
{
	string ss("hello");
	int first_pos = find_char(ss, ‘a‘);
	if (first_pos == -1) {
		cout << "Not find!\n";
	}
	else {
		cout << "first find at " << first_pos << endl;
	}
	return 0;
}

以上是关于推荐形参使用常量引用:void func(const T &);的主要内容,如果未能解决你的问题,请参考以下文章

第5课 引用的本质分析

嵌入式C++学习 引用

C++ 不推荐将字符串常量转换为 'char*'

C# 图解教程 第五章

C 语言字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )

剑指offer