簡體   English   中英

當我們通過引用使用方法作為參數時,實際上發生了什么?

[英]What's really happening when we use a method as a parameter by reference?

假設這:

class A
{
    public:
        A(int x) : m_someDataMember(x) {}
        ~A() {}
        int& someMethod(){ return m_someDataMember; }

    private:
        int m_someDataMember;
};

class B
{
    public:
    B(){}
    ~B(){}
    void anotherMethod(int& someInt){ /*...*/}
};

現在主要

int main(/*..*/)
{
    A a(5);
    B b;
    b.anotherMethod(a.someMethod());
}

我的問題是, anotherMethod()到底收到了什么? 難道是內存地址本身的m_someDataMember從對象,或副本的內存地址m_someDataMemeber由歸國a.someMethod()

編輯:糾正錯字,缺少& int& someMethod()

在anotherMethod()中到底收到了什么?

收到對該相同變量的 引用

它是對象a中m_someDataMember的內存地址本身,還是a.someMethod()返回的m_someDataMemeber副本的內存地址?

該引用可能是一個內存地址,但是C ++並未規定編譯器必須如何實現引用。 整個類也可以存在於CPU寄存器中,在這種情況下,它沒有內存地址。

但是不會創建m_someDataMember的副本。 它引用相同的變量。

當您嘗試將非const引用綁定到臨時對象時,這將是編譯器錯誤。

看到這個現場的例子

您可以通過使someMethod()返回您可能不想執行的引用來解決此問題,也可以采用const引用。

請參閱此使用const引用的實時示例

根據OP更改進行編輯

如果您有一個返回引用的函數,並且在另一個函數的參數列表中調用了該函數,則該函數將引用第一個函數返回的任何變量。 在這種情況下,不會進行任何復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM