我有這樣的方法:初始化與引用的對象
MyClass& Smth::getMyClass() {
return myClassObj;
}
,現在這兩個例子的工作方式相同(vs2012):
MyClass& a = smthObj.getMyClass();
a.whatever();
MyClass a = smthObj.getMyClass();
a.whatever();
如何解讀?
我有這樣的方法:初始化與引用的對象
MyClass& Smth::getMyClass() {
return myClassObj;
}
,現在這兩個例子的工作方式相同(vs2012):
MyClass& a = smthObj.getMyClass();
a.whatever();
MyClass a = smthObj.getMyClass();
a.whatever();
如何解讀?
如何解釋?
MyClass& a = smthObj.getMyClass();
a.whatever();
a
爲參考到smthObj
的數據成員。第二行在數據成員上調用whatever()
。
MyClass a = smthObj.getMyClass();
a.whatever();
a
是smthObj
的數據部件的拷貝。第二行在該副本上調用whatever()
。
'MyClass&'和'MyClass'是不是意味着另一種類型?正因爲如此,我認爲使用MyClass a時編譯應該失敗;因爲返回的類型是'MyClass&'。 – tobi
@tobi'MyClass'和'MyClass的&'是不同的,但所發生的事情是,一個'MyClass'複製正在從基準到另一'MyClass'對象('Smth'的數據成員) – juanchopanza
這是否意味着有一個隱含的演員? – tobi
他們不以相同的方式工作。在第一種情況下,函數返回一個引用,調用者將另一個引用綁定到同一個對象。 a
上的任何操作將應用於myClassObj
。在第二種情況下,調用者創建對象的副本,應用於a
的任何操作將應用於該副本,並且不會影響原始對象。
定義「以同樣的方式工作」。您希望他們以何種方式不同,以及代碼與您的期望有什麼不同? –
在第二種情況下,對象仍將被複制。 – 2013-06-21 12:55:16
@SebastianRedl我的意思是你可以用'。'來調用它,並且編譯不會失敗。 – tobi