class B
{
public:
A* GetA() const { return obj; }
private:
A* obj;
}
...
B b;
b.GetA()->AInterfaceMethod(params);
所以我的问题是:
我在Unreal教程中遇到过这个问题(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
。
答案 0 :(得分:2)
- 如果函数不是const,会有什么不同?
醇>
如果函数是非const成员函数,则不能在const对象上调用它。
const B b;
b.GetA(); // Fail, can't call a non-const member function on a const object
- 对于通过GetA()获得的指针,我可以做什么限制?是const吗?它是否指向const A?
醇>
不,这里没有什么不同。返回的值不是const本身,也不是指向const的指针,它只是声明A*
。如果对象是const,则成员变量obj
也将是const,即A* const
,请注意它仍然不是指向const的指针,即const A*
。无论如何,你按类型A*
按值返回它,所以这里没有什么不同。
- 什么时候有用?
醇>
Const成员函数和非const成员函数可能会重载。您可以将它们用于不同目的。 e.g。
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*
答案 1 :(得分:1)
如果函数不是常量,会有什么不同?
const方法有一个契约 - 它不直接或间接地改变对象B
的内部状态,例如它不会将指针obj
更改为指向其他地方。所以这段代码:
A* GetA() const { obj = new A; return obj; }
无法编译。
对于通过GetA()获得的指针,我可以做什么限制?是const吗?它是否指向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.
什么时候有用?
您可以单独控制可以在方法内部更改的内容以及可以使用对象返回的内容,您返回的指针。你可以选择。