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>
  • 相关阅读:
    开始几天的基本学习
    从这个博客开始我的机器学习深度学习之路
    剑指Offer:面试题3——二维数组中的查找(java实现)
    HIVE配置文件
    C++ 之旅:前言
    leetcode 349:两个数组的交集I
    python学习(三):matplotlib学习
    python学习(二):python基本语法
    Android环境搭建
    LeetCode:237
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4510116.html
Copyright © 2011-2022 走看看