[英]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);
所以我的問題是:
我在一個虛幻教程中遇到了這個問題(在教程中向前聲明了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
。
- 如果函數不是const,會有什么不同?
如果函數是非const成員函數,則不能在const對象上調用它。
const B b;
b.GetA(); // Fail, can't call a non-const member function on a const object
- 通過GetA()獲得的指針對我的操作有任何限制嗎? 是const嗎? 它指向常量A嗎?
不,這里沒有什么不同。 返回的值本身不是const,也不是指向const的指針,它只是聲明的A*
。 如果對象是const,則成員變量obj
也將是const,即A* const
,請注意,它仍然不是指向const的指針,即const A*
。 無論如何,您使用A*
類型的值返回它,所以這里沒有什么不同。
- 什么時候有用?
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.