c++将引用用于类对象

将类对象传递给函数时,c++通常用的是引用,可以通过引用让函数string,ostream,istream,ofstream和ifstream等类的对象作为参数.

下面我们看一个例子,基本思想是创建一个函数,将指定的字符串加入到另一个字符串的前面和后面,但是有一个缺陷,我们先来看代码.

#include
#include
using namespace std;
string version1(const string &s1,const string &s2);//从定义的形参上会发现,引用和const,这就说明是不可修改的值
const string &version2(string &s1,const string &s2);
const string &version3(string &s1,const string &s2);
int main()
{
   string input;
   string copy;
   string result;
   cout<<"enter a string: ";//输入一个字符串
   getline(cin,input);//因为cin不能读取空格,所以用getline
   copy = input;//进行赋值
   cout<<"your string as entered: "<

我们输入就以bing ge is a handsome boy为例子

看一下输出:

c++将引用用于类对象_第1张图片

 对于函数1,可能会有个疑惑那就是,这个函数的两个形参都是const string &而***是char *类型 的,

在这里进行解释,首先,string类定义了一种char *类到string的转换功能.

现在我们开始分析为什么到了第三个函数程序会崩溃

相信第一个程序是很容易看懂的,代码注释也给了解释.

我们现在看函数2,函数2不能创建临时string对象而是直接修改原来的string对象,这个函数可以修改s1,但是不能修改s2,因为s2用了const修饰.

由于s1是一个指向main()中的一个对象input的引用,因此将s1作为引用返回是安全的.但是由于s1是指向input的引用,函数唯一的副作用就是会修改input的值.

现在可以看函数三的错误了,它竟然妄图返回一个已经删除内存的函数3中的临时变量的值,显然不可实现 

你可能感兴趣的:(c++,开发语言,后端)