は私が混乱して作られた組み合わせ:オーバーロードとテンプレートは、コードの下
私は演算子のオーバーロード義務付け少なくとも一つの非組み込み型として、コンパイル時にエラーを与える
operator+<int>
を期待していました。試してみたら、int operator+(int i, int j)
は失敗します。しかし、何の問題も生じませんでした。なぜですか?2+3
に電話するとoperator+
が呼び出されない場合、私は明示的にoperator+<int>
をしなければなりませんか?私の定義を
operator+
と呼ぶのにoperator+<int>
を書く方がいいですか?私が参照できる場所はありますか?いいですか?
注:それはAです:私は質問への答えは比較的簡単だと思う "日C++ 5.10"
#include <iostream>
using namespace std;
template <typename T>
T operator+(T i, T j)
{
return i+j;
}
int main()
{
cout<<2+3;
cout<<operator+<int>(2,3);
cout<<endl;
}
出力は以下の通りです、
bash-2.03$ ./a.out
55
どのようにして '2)'を決定しましたか? – thiton
私はこの問題が何であるか分かりません。あなたは関数 'operator +(int、int)'を作成することはできず、同じものではない関数 'operator +(int、int)'を作成したことに気付いています... –
operator +はテンプレートをインスタンス化しています。だから私は演算子+(int、int)が許可されていない場合、演算子+ (int、int)も許可すべきではないと思った。テンプレートはコンパイル時に解決されます。 –
rakesh