首页 > 代码库 > 函数取地址与复制构造函数的使用
函数取地址与复制构造函数的使用
今天在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>
函数取地址与复制构造函数的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。