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