簡體   English   中英

const成員函數的返回值(作為指針)的屬性是什么?

[英]What are the properties of a const member function's return value, being a pointer?

class B
{
    public:
        A* GetA() const { return obj; }
    private:
        A* obj;
}

... 

B b;
b.GetA()->AInterfaceMethod(params);

所以我的問題是:

  1. 如果函數不是const,會有什么不同?
  2. 通過GetA()獲得的指針對我的操作有任何限制嗎? 是const嗎? 它指向常量A嗎?
  3. 什么時候有用?

我在一個虛幻教程中遇到了這個問題(在教程中向前聲明了A )。

編輯:我可能搞砸了,但通話確實有效。 我在下面包含了實際的虛幻代碼:

class ABatteryPickup : public APickup
{
    ABatteryPickup()
    {
        GetMesh()->SetSimulatePhysics(true);
    }
}

class Pickup
{
    public:
        class UStaticMeshComponent* GetMesh() const { return PickupMesh; }

    private:
        class UStaticMeshComponent* PickupMesh;
}

UStaticMeshComponent::SetSimulatePhysics()不是const

另外,只需在一個新的,干凈的C ++項目中對此進行測試,即可正常工作。 屏幕截圖證明

  1. 如果函數不是const,會有什么不同?

如果函數是非const成員函數,則不能在const對象上調用它。

const B b;
b.GetA();  // Fail, can't call a non-const member function on a const object
  1. 通過GetA()獲得的指針對我的操作有任何限制嗎? 是const嗎? 它指向常量A嗎?

不,這里沒有什么不同。 返回的值本身不是const,也不是指向const的指針,它只是聲明的A* 如果對象是const,則成員變量obj也將是const,即A* const ,請注意,它仍然不是指向const的指針,即const A* 無論如何,您使用A*類型的值返回它,所以這里沒有什么不同。

  1. 什么時候有用?

const成員函數和非const成員函數可能會重載。 您可以將它們用於其他目的。 例如

class B
{
    public:
        A* GetA() { return obj; }             // returns A*
        const A* GetA() const { return obj; } // returns const A*
    private:
        A* obj;
}

... 

B b;
b.GetA();  // get A*
const B cb;
cb.GetA(); // get const A*

如果函數不是const,會有什么不同?

const方法具有合同-它不會直接或間接更改對象B內部狀態,例如,它不會將指針obj更改為指向其他位置。 所以這段代碼:

A* GetA() const { obj = new A; return obj; }

將無法編譯。

通過GetA()獲得的指針對我的操作有任何限制嗎? 是const嗎? 它指向常量A嗎?

不,類型A對象是不相關的,要使此方法返回const A指針,您需要更改返回的指針的類型:

const A *GetA() const { return obj; } // now you cannot change A through pointer you get, unless you const_cast it.

什么時候有用?

您可以分別控制方法內部可以更改的內容以及對象,返回的指針可以完成的操作。 您只是選擇。

暫無
暫無

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

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