У меня есть такой код:
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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение