Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99230
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2013-07-17 10:38:54


引子:
string& s="hi" 为什么编译不通过
因为如果通过的话,“hi"是常量字符串,s改变就会改变"hi"的内容,所以编译不通过。
const string& s="hi"这样才可以


#include

class test
{
public:
 test()
 {std::cout<<"bbb"<

 test(const test& t)
 {std::cout<<"ccc"<

 test& operator=(const test& t)
 {std::cout<<"aaa"< };

void func(const test& t){}
void func1(const test t){}

int main()
{
 const test t1;   //bbb
 const test t3=t1;  //ccc
 const test t4(t3);  //ccc
 const test& t2=t1;  //不输出,说明引用不会创建新对象

 //以下说明函数参数的副本 是通过 拷贝构造函数 来初始化的
 func(t1);    //不输出
 func1(t1);    //ccc
 return 0;
}

 

func(string str) --func("hi")-----------等价于string str="hi"-------------------------调用构造函数string(const char*)
func(const string& str)--func("hi")----等价于const string& str="hi"-----------------新建一个副本,调用构造函数string(const char*), 再把这副本复制给引用

阅读(519) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~