1

読む前に編集してください:申し訳ありませんが、改行を追加しなかったため、ごちゃ混ぜに見えました。まだ登録されていないため、質問を削除できません。時間を無駄にして申し訳ありません。

マクロの代わりに(2つの数値のMINを見つけるために)初めてテンプレートを使用したところ、気に入ったのです。しかし、自分のテンプレートを変更して作成しようとすると、完全に失敗しました。コードは次のとおりです。

#include <stdio.h>

template <class T> T min(T a, T b) { 
    return a < b ? a : b; 
};

//My attempt now.. because add could be int, float, etc; I wanted a template.
template <class T> T add(T a, T b) {
    return a + b;
};

int main(){

    printf("%f\n", min(1.3, 2.2));  //(Does not appear in console?)
    printf("%d", add(1, 10));       //1.300000 (how is an int show as float? lol)
    printf("%f", add(5.1, 7.34));   //1112.440000
    return 0;
}

コメントに奇妙な結果があります。Minは正常に機能しますが、比較から「a + b」に変更すると、minが機能しなくなり、奇妙なフロート値が渡されます。

私はそれを間違った方法で使用していますか?、それは何か他のものになるはずですか?どういう意味ですか?基本を理解しているので、簡単な説明で大丈夫です。ありがとうございます!

4

2 に答える 2

3

他の行の後に改行を追加してみてください。

何が起こるかこれは:

  1. min(1.3, 2.2)どちらが印刷されますか1.300000
  2. 改行を印刷します
  3. それは印刷しますadd(1, 10)、それは11
  4. add(5.1, 7.34)どちらが印刷されますか12.440000

手順3と4の間に改行がないため、番号が次々に出力され、次のようになります1112.440000

于 2010-06-29T10:42:57.333 に答える
0

Cの習慣を​​取り替えたら、ストリームをチェックしてください。

int main()
{
    std::cout << min(1.3, 2.2) << '\n' 
              << add(1, 10) << '\n' 
              << add(5.1, 7.34) << '\n';
    return 0;
}
于 2010-06-29T10:53:05.820 に答える