gpt4 book ai didi

c++ - 如何跨指针保持 const 正确性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:52 24 4
gpt4 key购买 nike

我正在尝试对真正为 const 的类进行 const 操作 - 它不会更改该类指向的数据。

例如:

class Node{
public:
int val;
};
class V{
public:
Node * node; //what is the change that is needed here?
void const_action()const{
node->val=5; //error wanted here
}
void action(){
node->val=5; //error is not wanted here
}
};

最佳答案

您可以使用模板在指针上强制执行 const 正确性,而无需更改类的含义或实现:

    template <typename T>
class PreseveConstPointer
{
T *t_;
public:
PreseveConstPointer(T *t = nullptr)
: t_(t)
{
}
PreseveConstPointer<T> * operator=(T *t)
{
t_ = t;
return this;
}
T* operator->()
{
return t_;
}
T const * operator->() const
{
return t_;
}
T * data()
{
return t_;
}
};
class Node{
public:
int val;
};
class V{
public:
PreseveConstPointer<Node> node;
V()
{
node = new Node;
}
~V()
{
if(node.data())
delete node.data();
}
void const_action()const{
node->val=5; // You will get an error here
}
void action(){
node->val=5; // No error here
}
};

关于c++ - 如何跨指针保持 const 正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065391/

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