1. 程式人生 > >return *this和return this

return *this和return this

看到書中的return *this比較疑惑,查詢過後總結如下。

class temp
{
    ...;
}

假如定義temp *get(){return this;},那麼返回的this就是地址,即返回一個指向物件的指標
假如定義temp get(){return *this;} 那麼返回的就是物件的克隆,是一個臨時變數
假如定義temp &get(){return *this;} 那麼返回的就是物件本身

例如:

#include<iostream>
using namespace std;
class A
{
    public:
    int x;
    A get()
    {
        return
*this; } }; int main() { A a; A b; a.x = 4; if( a.x == a.get().x ) { cout << "asasas "; cout << a.x << endl; } else { cout << "no " << a.get().x << endl; } b = a.get(); cout << &b << " "
<< &a << endl; cout << "b == " << b.x << endl; return 0; }

輸出結果為

asasas   4
0x7ffdcfbb6650   0x7ffdcfbb6640
b == 4

綜上所述,return *this 返回的是物件的本身或克隆(具體看函式宣告),return this 返回指標

這裡我還犯過錯誤,在敲上述程式碼時,我試圖看看返回的克隆物件的地址,即敲了&a.get(); 這樣的語句,結果是錯誤的,因為該函式返回物件的克隆,即一個臨時變數,而臨時變數的記憶體地址是不可取得的

相關推薦

return *thisreturn this有什麼區別

return *this返回的是當前物件的克隆或者本身(若返回型別為A, 則是克隆, 若返回型別為A&, 則是本身 ); return this返回當前物件的地址(指向當前物件的指標)。this指標裡面存放的是當前物件的地址。 #include <iostream> us

今天看到的一個有趣面試題:return *thisreturn this有什麼區別?

      別跟我說, return *this返回當前物件, return this返回當前物件的地址(指向當前物件的指標)。       正確答案為:return *this返回的是當前物件的克隆或者本身(若返回型別為A, 則是克隆, 若返回型別為A&, 則是本

return *thisreturn this

看到書中的return *this比較疑惑,查詢過後總結如下。 class temp { ...; } 假如定義temp *get(){return this;},那麼返回的this就是地址,即返回一個指向物件的指標 假如定義temp get(

C++ 中 return this return *this 的區別

我們都知道c++   this指標的概念(可參考),this指標說白了就是存放當前物件的地址;那麼 我們可以理解為  *this為去改指標的內容即是當前的物件,所以return *this 返回的應該是當前的物件本身或者說是該物件的克隆 ;而this既然為指標,改指標指向的是

return *thisreturn this有什麼區別?

別跟我說, return *this返回當前物件, return this返回當前物件的地址(指向當前物件的指標)。       正確答案為:return *this返回的是當前物件的克隆或者本身(若返回型別為A, 則是克隆, 若返回型別為A&, 則是本身

this$(this)的區別到底在哪裏

返回值 -1 query http log 點擊 對象 jquery logs this是一個神奇的東西 加完點擊事件他就是此時點擊的那個元素 加完鍵盤事件的話他就是。。。。。。 總之他就是很神奇, 從返回值來講的話 this返回的是一個HTML對象 所以可以調用HT

js跳出循環的方法區別( break, continue, return ) 及 $.each 的(return true return false)

als onsubmit scrip case語句 成語 clas 輸入 結束 而在 js編程語法之break語句: break語句會使運行的程序立刻退出包含在最內層的循環或者退出一個switch語句。 由於它是用來退出循環或者switch語句,所以只有當它出現在這些語句時

javascript中的 return falsereturn true

關於javascript中的 return false和return true,return 是javascript裡函式返回值的關鍵字,一個函式內處理的結果可以使用return 返回,這樣在呼叫函式的地方就可以用變數接收返回結果。return 關鍵字內任何型別的變數資料或表示式都可以進行返回,甚至什麼都不返

Springmvc中的return modelAndViewreturn "xxxx"的區別

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property nam

return,抽象類與介面,物件序列化機制,thissuper,識別符號,breakcontinue以及return,final,finallyfinalize

               (2)介面中定義的成員變數預設為public static final,只能夠有靜態的不能被修改的資料成員,而且,必須給其賦初值,其所有的成員變數只能被public,abstract這兩個關鍵字修飾。抽象類可以有自己的成員變數,還可以有非抽象的成員方法,抽象類的成員變數預設為de

javascript ------->this json

javascript function private person public <!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>this+

break、continuereturn的區別

sans spl src cnblogs 繼續 也會 for size 分享 1.break:跳出當前循環   01.作用:     001.只能在循環體內和switch語句體內使用break語句     002.使用break只能跳出當前的循環體或者是當前的switch語

this $(this) 的區別

.com .cn style alt font 區別 cnblogs alert 分享 沒事就alert一下 this 和 $(this) 的區別

jQuery的 this$(this)

tab 循環 amp ole .text lin 原生 我想 for 今天剛剛遇到的問題,用jquery主要的目的是想匹配一個標簽內的字符串後執行幾個操作 1 {loop $qq_result $activity} 2 <dd&g

java中 thissuper的差別

屏蔽 code args mod -h ans 使用 -a oid this表示當前調用方法的對象的引用: (誰調用這種方法,誰就是這個對象,這個this就是它的引用) 比方:<pre name="code" class="j

Java中thissuper的用法總結

return 類繼承 xtend chinese ati -s sha blog 定義 在JAVA類中使用super來引用父類的成分,用this來引用當前對象。 如果一個類從另外一個類繼承,我們new這個子類的實例對象的時候,這個子類對象裏面會有一個父類對象。怎麽去引用裏面

javascript創建對象方法(this)

data- 函數 ava this ict 繼承 tro blank wiki 1.創建對象: 參考鏈接 記住:JavaScript的原型鏈:所有對象都是實例,所謂繼承關系就是將一個對象的原型指向另一個對象。 2.方法(this詳解): 參考鏈接 記住:this指針

java中this super關鍵字的作用

etag 傳遞 記錄 ont this spa 根據 普通 void emmmmmm也真的是好久沒有寫過java了,因為項目需要, 最近又必須重新拾起來了,雖然好多東西也都忘得差不多了.... 然後發現 竟然把super和this傻傻分不清.... 開個帖子記錄一下: 一、

React:JS中的this箭頭函數

-c c++ upload per 初始 正常 develop pan pre JS中的this和純面向對象(java,c++)中的this有點不大一樣,其原因就是作用域不同,導致JS中的this的指向不明確,在java中的this指當前對象的this或當前類的this,在

jquery裏$(this)this的區別在哪

addclass 調用 cti OS dom節點 att query lis attr 下面兩段代碼在jquery的官網見到的,何時用$(this),又何時用this呢? $(document).ready(function() { $("#orderedlist