2

私はそのような関数を定義しました:

template<typename T>
void SwapMe(T *first, T *second)
{
    T tmp = *first;
    *first = *second;
    *second = tmp;
}

次に、そのように使用します。

SwapMe(&data[i], &data[j]);

ご覧のとおり、明示的に使用してSwapMe<T>(...);いませんが、機能します。
なぜC++標準では、引数の型を明示的に指定することを避けられるのですか?

4

1 に答える 1

5

必要なものは、のタイプから推測Tできます。*first

プログラマーによる明示的な指定は、コンパイラーが自動的に推論を行うことができない場合にのみ必要です。

この(一見単純ですが実際にはかなり複雑な)現象は、引数依存の名前ルックアップまたはケーニッヒルックアップとして知られており、発明者のアンドリューケーニッヒにちなんで名付けられました。

于 2013-01-23T04:09:42.103 に答える