関数の引数でのエイリアスの使用に問題があります。これが私の問題です。
この関数の定義を考えてみましょう
void thisIsSparta(int& number){
...
}
呼び出し時に、次のコードで完全に機能します。
int king = 1;
thisIsSparta(king);
しかし、これを試してみると、不一致エラーが発生します:
thisIsSparta(1);
エイリアスする変数がないためにエラーが発生していることは簡単に推測できます。したがって、エラーが発生します。ただし、プログラマーが2つのアプローチのいずれか1つだけを使用することを心配する必要はありません。この2番目の関数呼び出しは、問題なく機能するはずです。
私が見る唯一の解決策は、最初の関数に加えて、エイリアス引数のない別の関数を作成することです。
void thisIsSparta(int number){
}
しかし、これはひどいコードの重複をもたらすでしょう、そして私はこれの大ファンではありません。
さらに、変数を使用する場合、プログラムは前者の代わりにこの2番目の定義を使用することを決定できます。次に、変数のコピーを回避することを目的としたエイリアスの興味を失います。
誰かが私の問題の解決策を持っていますか?確かに、これは単純化された例です。実際には、この関数の引数にジェネリック型があり、任意に大きくなる可能性があります。これが、コピーを避けるためにエイリアスを使用したい理由です。