码迷,mamicode.com
首页 > 其他好文 > 详细

函数取地址与复制构造函数的使用

时间:2015-05-17 18:36:26      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

今天在CSDN的论坛上逛一了圈发现有例如以下两段代码:我在两个提问的地方都已经给予了作答,同一时候公布到blog上希望能有很多其它的人受益。

第一段是对复制构造函数的使用

class c
{
string name;
public:
c(const string& s):name(s){}
};
void fn(c& s)
{
cout<<"ok!"<<endl;
}
int main()
{
fn(string("Jenny"));
}
//这段代码在VS2005下是肯定不能编译的,由于vs仅仅能从string推导出c,没有办法自己主动从string推导出c&。将函数fn()的引用去掉就能够得。------解答:首先在主函数里的string会生成一个无名的对象,然后调用c的复制构造函数生成一个无名的c对象这就能够,第二层原因是引用必须是有名的对象且必须初始化才干在C++中做引用操作。

第二段是对函数取地地址操作

# include <iostream>

using namespace std;

int func()
{
int a = 2;

return a;
}

int main(void)
{
cout << &func() << endl; //提示这句错误,须要左值,假设返回一个对象却能够

return 0;
}

# include <iostream>

using namespace std;

class human
{
public:
void set(int i){x = i;}
int get(){return x;}
private:
int x;
};

human func()
{
human a;
a.set(123);
cout << a.get()<<endl;
return a;
}

int main(void)
{
cout << &func() << endl; //能够取地址

return 0;
}
<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245); ">//解答:一般的,假设返回值是内建类型的话,比如int,short,char之类的,通常将返回值保存在eax,ax,al寄存器里面,自然就无法取得地址了。</span>

函数取地址与复制构造函数的使用

标签:

原文地址:http://www.cnblogs.com/hrhguanli/p/4510116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!