c++中关于拷贝构造函数 和const的相关问题,希望有关于const,&的专业知识共享 50
#include<iostream>#include"string.h"usingnamespacestd;classString{private:intlen;char...
#include <iostream>
#include "string.h"
using namespace std;
class String
{
private:
int len;
char *p;
public:
String():len(0)
{
p=new char[len+1];
strcpy(p,"");
}
String(char *s)
{
if(!s)
{
len=0;
s=new char[len+1];
strcpy(p,s);
}
else
{
len=(int)strlen(s);
p=new char[len+1];
strcpy(p,s);
}
cout<<"lei xing zhuan huan !"<<endl;
}
const String(const String&a)
{
len=a.len;
p=new char[len+1];
strcpy(p,a.p);
cout<<"copy";
}
~ String()
{
delete []p;
p=NULL;
}
friend void print(String &s);
//friend void print(const String &s);//为什么加了const就可以了????
};
void print(String &s)
//void print(const string &s)//为什么加了const就可以了????
{
cout<<s.p<<" ";
cout<<endl;
}
int main(int argc, char * argv[])
{
char *a="we are the world";
print(a);
return 0;
} 展开
#include "string.h"
using namespace std;
class String
{
private:
int len;
char *p;
public:
String():len(0)
{
p=new char[len+1];
strcpy(p,"");
}
String(char *s)
{
if(!s)
{
len=0;
s=new char[len+1];
strcpy(p,s);
}
else
{
len=(int)strlen(s);
p=new char[len+1];
strcpy(p,s);
}
cout<<"lei xing zhuan huan !"<<endl;
}
const String(const String&a)
{
len=a.len;
p=new char[len+1];
strcpy(p,a.p);
cout<<"copy";
}
~ String()
{
delete []p;
p=NULL;
}
friend void print(String &s);
//friend void print(const String &s);//为什么加了const就可以了????
};
void print(String &s)
//void print(const string &s)//为什么加了const就可以了????
{
cout<<s.p<<" ";
cout<<endl;
}
int main(int argc, char * argv[])
{
char *a="we are the world";
print(a);
return 0;
} 展开
展开全部
因为你调用的参数是 char* ,而函数的参数是string,必须发生隐式转换。
而隐式转换生成的结果是string临时变量,而你又是引用,所以形参引用的是临时变量。
但只有const引用才能引用临时变量,所以这里必须加const才能编译通过。
而隐式转换生成的结果是string临时变量,而你又是引用,所以形参引用的是临时变量。
但只有const引用才能引用临时变量,所以这里必须加const才能编译通过。
追问
求详解,
我想的是:这里&是为了不为行参开辟内存,和实参共享,行参是实参的别名
const是为了不改变实参的值。还是不太懂加const的其他作用
追答
注意你的实参和形参的类型不一致,所以会发生隐式转换,而隐式转换生成的是临时变量,临时变量是不允许修改的,所以在引用临时变量时,必须是const引用
int a = 10;
int& b = (a + 1); // 错误,a+1是临时变量,右值不能被引用,error C2440: “初始化”: 无法从“int”转换为“int &”
const int& c = (a + 1); // 正确
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询