Ссылка на константу: переменная, используемая в условии цикла, не изменяется в теле цикла.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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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