2015-05-07 47 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