zoukankan      html  css  js  c++  java
  • 函数取地址与复制构造函数的使用

    今天在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>
  • 相关阅读:
    [转]scrapy中的request.meta
    Item Pipeline
    scrapy spider官方文档
    scrapy选择器主要用法
    scrapy 选择器官方文档
    【bzoj3514】Codechef MARCH14 GERALD07加强版 LCT+可持久化线段树
    【bzoj3813】奇数国 线段树
    【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
    【bzoj4499】线性函数 线段树
    【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树区间合并+STL-set
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4510116.html
Copyright © 2011-2022 走看看