gpt4 book ai didi

C++ const 成员函数返回一个指针

转载 作者:行者123 更新时间:2023-11-30 00:48:00 27 4
gpt4 key购买 nike

将方法标记为 const 是否被认为是不好的做法,即使它返回的(指针)数据成员可以在方法“外部”使用以更改其引用的对象?

看看 bone() 方法。

class SceneNode
{
public:
SceneNode(const char *nodeName, SceneNode *parent);
~SceneNode();

void setBone(Bone *bone);
Bone* bone() const { return _bone; }
};

private:
Bone *_bone;
};

我问这个是因为这对我来说似乎有点奇怪,因为如果 _bone 不是指针,而是一个对象(当然,除非它返回一个 const 引用或拷贝,否则该方法不能是 const)。

最佳答案

视情况而定例如,unique_ptr::operator*()被标记为 const 但不向它返回的引用添加额外的 const。这是有道理的,因为它类似于能够修改 T *const 指向的内容但不能更改指针本身。

const std::unique_ptr<int> uptr(new int); // make_unique is better
*uptr = 1; // sure, I can modify what it points to
uptr.reset(); // no, this modifies the pointer itself (conceptually)

另一方面,像 std::string 这样有 char& operator[](size_t) const; 的东西会很奇怪,因为 char它里面的 s 应该像它们所引用的对象的一部分一样(string 类)

const std::string s{"hello world"}; // I expect this to always be "hello world"
s[0] = 'a'; // error, you're conceptually modifying the string

由您决定什么在您的 API 中有意义以及您的类何时是“道德常量”。如果你有

void fun(const SceneNode& node);
int main() {
SceneNode n(...);
Bone b;
n.setBone(&b);
fun(n);
assert(*n.bone() == b); // is this a safe assumption?
}

如果您认为断言应该始终成立,则返回一个 const Bone*

关于C++ const 成员函数返回一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248977/

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