2015-05-07 44 views
-1
class MyClass 
{ 
public: 
int x=0; 
}; 

void doSomething(MyClass obj) 
{ 
    obj.x=1; 
} 

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

QCoreApplication a(argc, argv); 
MyClass obj; 

doSomething(obj); 
qDebug()<< "x is " << obj.x; 

return a.exec(); 
} 

我知道如果我在這裏傳遞指針,x將是1,我的問題是obj.x=1中發生了什麼;聲明在這裏?爲什麼x 0在這裏,x = 1語句中發生了什麼?

+0

它正在修改複製的對象。基本上是不操作的,因爲該對象立即超出範圍。 – AndyG

+0

@AndyG我不會稱它爲臨時的,它有一個名字。 – Angew

+0

@Angew:編輯的正確性 – AndyG

回答

2

Inside doSomethingobj是一個局部變量,它包含從main傳入的對象的副本。 obj.x = 1正在修改該本地副本的成員。當函數返回時,這個局部變量被銷燬,所以賦值沒有永久效果。但是如果你在函數中有更多的代碼,並且它使用了obj.x,它會看到值1