EC筆記:第4局部:20、傳遞援用替代傳值。本站提示廣大學習愛好者:(EC筆記:第4局部:20、傳遞援用替代傳值)文章只能為提供參考,不一定能成為您想要的結果。以下是EC筆記:第4局部:20、傳遞援用替代傳值正文
思索以下場景:
#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;
}