std::vector<int> a;
a.push_back(1);
a.push_back(a[0]);
上記のコードが非常に危険な場合があることを知りました。
(理由が明らかでない場合、あなたは一人ではありません... 私にも明らかではありませんでした。)
私の質問:
それに対処する「標準的な」方法は何ですか?新しい変数を作成し、その後すぐに何かに割り当てるのは、私には少し奇妙に思えます。それに対処するより良い方法はありますか?
このようなエイリアシングの問題に注意するために、どのように自分自身を訓練しますか? どのパターンを探しますか? この状況を認識できません。Cのキーワードについて学んだときにエイリアシングについて学んだ
restrict
だけで、問題が実際に何であるかを理解できるようになったのは今だけです。
編集:
私は答えを受け入れたいと思っていますが、質問の(2)の部分が答えられていないようです. 自分が書いたコードのエイリアシングの間違いを見つけるために、人々がどのような戦略を使用しているのか疑問に思っています。
これまでに思いついた戦略の 1 つは、2 つのパラメーターで同じ値を渡さないようにすることです。(この場合、1 つのパラメーターが暗黙的で、1 つが明示的です。)
他に簡単に気を付けたり注意したりすることはありますか?