C++類的返回值是*this的成員函數(shù)問題
C++類返回值是*this成員函數(shù)
當(dāng)C++類的成員函數(shù)其返回值是*this時(shí),表示返回值是調(diào)用該成員函數(shù)的變量的引用。
例如:
class A { public: ? A& func1() { ? return *this; ? } ? int i{0}; }
此時(shí),類A的成員函數(shù)func1的返回值是*this,該成員函數(shù)的返回值類型是A&。
1 返回值是左值
func1()函數(shù)的返回值是類型A的引用,該返回值是左值。也就是說,此時(shí)返回的是調(diào)用該函數(shù)的對(duì)象本身,通過該返回值可以調(diào)用該對(duì)象的其他成員函數(shù)或者對(duì)其他成員變量進(jìn)行賦值。
A a; a.func1().i = 10;
此時(shí)類A的對(duì)象a的成員變量i的值是10。
2 const成員函數(shù)的返回值
在const成員函數(shù)中,不能修改對(duì)象的成員變量。當(dāng)const成員函數(shù)返回值是*this時(shí),表示返回的是一個(gè)const對(duì)象的引用。
const A& func2()const { ? return *this; }
其中,func2()函數(shù)是類A的const成員函數(shù),該函數(shù)的返回值類型是const A&,而不是A&。此時(shí),如果通過func2()函數(shù)的返回值修改對(duì)象的成員變量
a.func2().i = 100;
此時(shí)的報(bào)錯(cuò)信息為“error C3892: “a”: 不能給常量賦值”。
對(duì)C++類成員返回語(yǔ)句return *this的理解
經(jīng)常會(huì)在類似 copy-assignment 的成員函數(shù)看到返回語(yǔ)句 return *this ,這類函數(shù)通常返回類型是所屬類的引用。
類成員函數(shù)的隱式指針 class *this const 經(jīng)過 *this的解引用后成為此對(duì)象本身。此時(shí)若成員函數(shù)返回類型是 class ,那么返回的將是 this 指向的對(duì)象實(shí)體的拷貝;
若返回類型是 class& ,那么將返回一個(gè)綁定在 this 指向的對(duì)象實(shí)體上的引用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言之素?cái)?shù)(質(zhì)數(shù))的判斷以及輸出
這篇文章主要介紹了C語(yǔ)言之素?cái)?shù)(質(zhì)數(shù))的判斷以及輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03C++中l(wèi)ist的使用與模擬實(shí)現(xiàn)
list相較于vector來說會(huì)顯得復(fù)雜,它的好處是在任意位置插入,刪除都是一個(gè)O(1)的時(shí)間復(fù)雜度,下面這篇文章主要給大家介紹了關(guān)于C++中l(wèi)ist的使用與模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-05-05