C++類的返回值是*this的成員函數(shù)問題
C++類返回值是*this成員函數(shù)
當C++類的成員函數(shù)其返回值是*this時,表示返回值是調用該成員函數(shù)的變量的引用。
例如:
class A { public: ? A& func1() { ? return *this; ? } ? int i{0}; }
此時,類A的成員函數(shù)func1的返回值是*this,該成員函數(shù)的返回值類型是A&。
1 返回值是左值
func1()函數(shù)的返回值是類型A的引用,該返回值是左值。也就是說,此時返回的是調用該函數(shù)的對象本身,通過該返回值可以調用該對象的其他成員函數(shù)或者對其他成員變量進行賦值。
A a; a.func1().i = 10;
此時類A的對象a的成員變量i的值是10。
2 const成員函數(shù)的返回值
在const成員函數(shù)中,不能修改對象的成員變量。當const成員函數(shù)返回值是*this時,表示返回的是一個const對象的引用。
const A& func2()const { ? return *this; }
其中,func2()函數(shù)是類A的const成員函數(shù),該函數(shù)的返回值類型是const A&,而不是A&。此時,如果通過func2()函數(shù)的返回值修改對象的成員變量
a.func2().i = 100;
此時的報錯信息為“error C3892: “a”: 不能給常量賦值”。
對C++類成員返回語句return *this的理解
經(jīng)常會在類似 copy-assignment 的成員函數(shù)看到返回語句 return *this ,這類函數(shù)通常返回類型是所屬類的引用。
類成員函數(shù)的隱式指針 class *this const 經(jīng)過 *this的解引用后成為此對象本身。此時若成員函數(shù)返回類型是 class ,那么返回的將是 this 指向的對象實體的拷貝;
若返回類型是 class& ,那么將返回一個綁定在 this 指向的對象實體上的引用。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。