gpt4 book ai didi

c++ - 作为指针的 const 成员函数的返回值的属性是什么?

转载 作者:行者123 更新时间:2023-11-28 00:02:14 24 4
gpt4 key购买 nike

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

...

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

所以我的问题是:

  1. 如果函数不是 const 会有什么不同?
  2. 我可以对通过 GetA() 获得的指针执行的操作有任何限制吗?是常量吗?它是否指向 const A?
  3. 这在什么时候有用?

我在 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

此外,刚刚在一个新的、干净的 C++ 项目上对此进行了测试,它可以正常工作。 screenshot proof

最佳答案

  1. What would be different had the function not been const?

如果函数是非 const 成员函数,则不能在 const 对象上调用它。

const B b;
b.GetA(); // Fail, can't call a non-const member function on a const object
  1. Are there any restrictions to what I can do with the pointer obtained via GetA()? Is it const? Does it point to a const A?

不,这里没有什么不同。返回值不是 const 本身,也不是指向 const 的指针,它只是声明的 A*。如果对象是 const,成员变量 obj 也将是 const,即 A* const,注意它仍然不是指向 const 的指针,即 const A* 。不管怎样,你用 A* 类型按值返回它,所以这里没有什么不同。

  1. When is this useful?

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*

关于c++ - 作为指针的 const 成员函数的返回值的属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com