我有一个函数,遍历一个对象树,并且不会修改任何在该树中的对象。
该函数大致如下:
static Node* findMatchingNode(const Node& root, const SomeFilterData& d);
struct Node {
Node* left;
Node* right;
};
该函数可以返回树中的根节点或任何对象,也可以不返回任何内容。显然,根据给定声明,我必须在某个地方执行const_cast,但在大多数情况下这是被禁止的。
一个函数能否保证其不变性,并同时允许任何人修改其输出?
编辑。我没有清楚地说明,我的函数确实不会修改树中的任何节点,也不会创建新节点,它是一个纯函数。我希望始终在那里使用const
限定符,以清楚地告诉所有人该函数不会修改任何东西
编辑。背后未明确说明的问题是,在函数执行期间(仅在函数内部),没有合法的方法来表达输入的不变性,而不强制执行输出的不变性。
vector::insert
。但我不确定是否可以应用这样的分离,因为缺少上下文信息。 - dyp