std::vector<int> a;
a.push_back(1);
a.push_back(a[0]);
I только что узнал, что приведенный выше код может быть очень опасным.
(Если не понятно, почему, вы не одиноки... для меня это было не очевидно).
Мои вопросы:
-
Каков "стандартный" способ борьбы с ним? Создание новой переменной и последующее присвоение ей чего-то после этого кажется мне немного странным. Есть ли лучший способ справиться с этим?
-
Как вы тренируетесь, чтобы следить за такими проблемами псевдонимов? Какие шаблоны вы ищете? Я понятия не имею, чтобы признать эту ситуацию; Я только узнал об aliasing, когда узнал о ключе
restrict
в C, и только теперь я понимаю, в чем проблема.
Изменить:
Я хотел бы принять ответ, но, похоже, часть (2) ответа на вопрос ответила. Мне интересно, какие стратегии люди используют, чтобы найти ошибки псевдонимов в коде, который они написали.
Одна из стратегий, с которой я столкнулся, заключается в том, чтобы избежать передачи одного значения в двух параметрах. (В этом случае один параметр неявный и один явный.)
Есть ли какие-либо другие легкие вещи, которые можно заметить и следить за ними?