У меня есть функция, которая пересекает дерево объектов и не изменяет ни один из объектов в дереве.
Функция выглядит примерно так:
static Node* findMatchingNode(const Node& root, const SomeFilterData& d);
struct Node {
Node* left;
Node* right;
};
Функция может возвращать корень или любой объект в дереве или ничего. Это очевидно, чем при данной декларации, мне нужно выполнить const_cast где-то, что запрещено в большинстве случаев.
Допустимо ли для функции гарантировать константу и в то же время разрешить кому-либо изменять ее выход?
ИЗМЕНИТЬ. Я не сказал этого ясно, моя функция действительно не модифицирует ни один из узлов в дереве, не создает новую Node, это чистую функцию. Я хотел бы всегда иметь квалификатор const
, чтобы ясно сказать всем, что функция ничего не меняет
ИЗМЕНИТЬ. Невысказанная проблема заключается в том, что нет законного способа выражения консистенции ввода во время выполнения функции (и только внутри функции) без принудительной установки выходной константы.