Ссылка на константу: переменная, используемая в условии цикла, не изменяется в теле цикла.C++

Программы на C++. Форум разработчиков
Anonymous
Ссылка на константу: переменная, используемая в условии цикла, не изменяется в теле цикла.

Сообщение Anonymous »

У меня есть такой код:
void splay(const size_t x) {
for (const size_t& nxfa = nodes.at(x).father; nxfa;) {
normalize(nxfa);
const Node& nf = nodes.at(nxfa);
if (nf.lch) normalize(nf.lch);
if (nf.rch) normalize(nf.rch);
rotate(x == nf.lch ? 'R' : 'L', x);
}
}

В состоянии цикла for инструмент clang-diagnostic-for-loop-analysis сообщает, что «переменная 'nxfa', используемая в условии цикла, не изменяется в теле цикла».Однако встроенный вызов функции rotate изменит объект, на который ссылается nxfa, просто мы не используем nxfa (const_reference) для его изменения.
Это законное использование, так что это просто ложная тревога, вызванная инструментом, верно? Спасибо.
Кстати, теперь я могу обойти эту проблему с помощью следующего кода:
void splay(const size_t x) {
while (nodes.at(x).father) {
const size_t nxfa = nodes.at(x).father;
normalize(nxfa);
const Node& nf = nodes.at(nxfa);
if (nf.lch) normalize(nf.lch);
if (nf.rch) normalize(nf.rch);
rotate(x == nf.lch ? 'R' : 'L', x);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -loop-body

Вернуться в «C++»