9
はf(new int)
がf(const T&)
代わりのf(const T*)
に解決されるのはなぜ私は、関数の2つのオーバーロード非constポインタがconstのTへのconst T&過負荷を好む*
template <typename T>
void f(const T&) {
cout << "f(T&)" << endl;
}
template <typename T>
void f(const T*) {
cout << "f(T*)" << endl;
}
があると?このカウンター直感的な振る舞いについて、スタンダードのどこでも話し合っていますか?テンプレート控除とオーバーロードの解決のために
'F(に従って勝ち、任意の非恒等変換シーケンスのサブシーケンスであると考えられますnew int) '' T 'を 'int *'に設定し、 'T'を' int'に設定するのではなく 'f'(const T&)'に解決します。これは、署名付きの関数を呼び出しているかのようです。 'f(int * const&); ' –
私はこの部分を知っていました。私の質問は、なぜ 'f(int * const&)'は 'f(const int *)'よりも良い一致ですか? –