程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> EC筆記:第4部分:20、傳遞引用代替傳值,ec筆記

EC筆記:第4部分:20、傳遞引用代替傳值,ec筆記

編輯:C++入門知識

EC筆記:第4部分:20、傳遞引用代替傳值,ec筆記


考慮以下場景:

#include <iostream>

#include <string>

using namespace std;

struct Person {

    string name;

    int age;

};

 

class Manager{

    private:

        Person person;

    public:

        Person get_person(){

            return person;

        }    

};

 

int main(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;

    return 0;

}

 

這段代碼想用get接口返回管理的對象,然後修改其內部值,但是這段代碼不能達成目的,而且編譯都不會通過,因為返回的對象並不是實際管理的對象,而是person對象的副本了。

但是如果將Person get_person()這個接口改為Person& get_person(),那這段代碼就沒什麼問題了。此時返回的是person對象的引用,可以直接改變其值。

 

另外,考慮一種情況:

#include <iostream>

#include <string>

using namespace std;

 

struct Person {

    string name;

    int age;

};

 

void func(Person p){

    

}

 

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

    Person p;

    //p進行一些操作,改變name的值,使它的長度足以影響到效率

    func(p);

    return 0;

}

 

這個函數在調用時,會將p復制一份,這回使效率大打折扣,所以建議改成:

#include <iostream>

#include <string>

using namespace std;

 

struct Person {

    string name;

    int age;

};

 

void func(const Person &p){

    

}

 

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

    Person p;

    //p進行一些操作,改變name的值,使它的長度足以影響到效率

    func(p);

    return 0;

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved