ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> C/C++教程 >> EC笔记:第4部分:20、传递引用代替传值

EC笔记:第4部分:20、传递引用代替传值

来源:网络整理     时间:2017-01-03     关键词:

本篇文章主要介绍了" EC笔记:第4部分:20、传递引用代替传值",主要涉及到方面的内容,对于C/C++教程感兴趣的同学可以参考一下: 考虑以下场景: #include <iostream> #include <string> usingnamespace std;str...

考虑以下场景:

#include <iostream>

#include <string>

usingnamespace std;

struct Person {

    string name;

    int age;

};

 

class Manager{

    private:

        Person person;

    public:

        Person get_person(){

            return person;

        }    

};

 

intmain(int argc,char*argv[]){

    Manager m;

    m.get_person().name="SkyFire";

    m.get_person().age=24;

    Person p=m.get_person();

    cout<<p.name<<endl<<p.age<<endl;

    return0;

}

 

这段代码想用get接口返回管理的对象,然后修改其内部值,但是这段代码不能达成目的,而且编译都不会通过,因为返回的对象并不是实际管理的对象,而是person对象的副本了。

但是如果将Person get_person()这个接口改为Person& get_person(),那这段代码就没什么问题了。此时返回的是person对象的引用,可以直接改变其值。

 

另外,考虑一种情况:

#include <iostream>

#include <string>

usingnamespace std;

 

struct Person {

    string name;

    int age;

};

 

voidfunc(Person p){

    

}

 

intmain(int argc,char*argv[]){

    Person p;

    //p进行一些操作,改变name的值,使它的长度足以影响到效率

    func(p);

    return0;

}

 

这个函数在调用时,会将p复制一份,这回使效率大打折扣,所以建议改成:

#include <iostream>

#include <string>

usingnamespace std;

 

struct Person {

    string name;

    int age;

};

 

voidfunc(const Person &p){

    

}

 

intmain(int argc,char*argv[]){

    Person p;

    //p进行一些操作,改变name的值,使它的长度足以影响到效率

    func(p);

    return0;

}

 

以上就介绍了 EC笔记:第4部分:20、传递引用代替传值,包括了方面的内容,希望对C/C++教程有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_4191225.html

相关图片

相关文章