C ++関数テンプレートの特殊化はどのように機能しますか?

曲がりくねった

C ++ Primer(5th Edition)、16.5、Defining a Function Template Specializationを読んでいて、作成者が示した例について混乱しているので、次のテンプレート関数を見てみましょう。

template <typename T> int compare(const T&, const T&);

およびその特殊バージョン:

template <>
int compare(const char* const &p1, const char* const &p2)
{
    return strcmp(p1, p2);
}

タイプTになりますconst char *が、私は関数はテンプレート関数の特殊化バージョンである可能性はないと思う、私は思うので、const char* const &p1唯一の専門ことができT const &ますがconst T &、私は私が間違っているけど、私は私が間違っている理由を知りたいです。

編集:

強調すべきことの1つは、を呼び出すcompare("hi", "mom")とコンパイルされない、つまり、にtemplate <typename T> int compare(const T&, const T&)初期化できないことです。または初期化されるint compare(const char* const &p1, const char* const &p2)ことTわかっていますが、これはコンパイルされないので、コンパイラはこれを無視しないのはなぜですか。一種の初期化ですが、コンパイルするものを選択しますか?char[3]char[4]

ジョン・ズウィンク

C ++では、まったく同じことconst TT const意味します。したがってconst T &T const &まったく同じこと意味します。

参照を変更して他の何かを参照することはできないため、他の方法はあり得ません(「再装着可能」ではありません)。T const &「別のTを参照するように変更できない参照」と読んだ場合、それは正しくありません。これは、「Tへの参照であり、そのTを変更するために使用することはできません(すべての参照と同様に、別のTを参照するように変更することはできません)」。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレートメンバー関数はC ++でどのように機能しますか?

分類Dev

関数のテンプレート控除はC ++でどのように機能しますか?

分類Dev

将来の特殊化のために、C ++テンプレート関数を戻り値の型に依存しないようにする方法

分類Dev

C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

分類Dev

SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

分類Dev

C ++エラーC2893:関数テンプレートの特殊化に失敗しました

分類Dev

テンプレートテンプレートの部分的特殊化は、-std = c ++ 1zとg ++でのみ機能します

分類Dev

エラーC2893:関数テンプレートVC ++ 2012の特殊化に失敗しました

分類Dev

C ++:配列の関数テンプレートの特殊化

分類Dev

関数テンプレートc ++の明示的な特殊化

分類Dev

C ++ 20では、プログラム定義型のstdでの関数テンプレートの特殊化はできなくなりますか?

分類Dev

sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

分類Dev

C ++テンプレートでメンバー関数を部分的に特殊化できないのはなぜですか

分類Dev

C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

分類Dev

ポインターの関数/ constポインターの関数によるC ++テンプレートの部分的な特殊化に違いはありませんか?

分類Dev

クラステンプレートの明示的な特殊化の定義は、C ++のどこに配置する必要がありますか?

分類Dev

C ++テンプレート特殊化メンバー関数の定義

分類Dev

C ++テンプレートの特殊化と関数の戻り値

分類Dev

C ++テンプレートの特殊化と関数の戻り値

分類Dev

C#の派生クラスのメンバー型をどのように特殊化しますか?

分類Dev

C ++ 11は、同じテンプレート関数のさまざまな特殊化を呼び出すテンプレート関数の構文を単純化します

分類Dev

C ++テンプレートの特殊化:operator()の戻り値の型を変更しますか?

分類Dev

C ++-テンプレートクラスの特殊化に一般的なテンプレートのコードを含める方法はありますか?

分類Dev

Cのような配列テンプレートの特殊化

分類Dev

C ++ 20概念テンプレート関数の特殊化を使用する場合の依存関係

分類Dev

Cの関数ポインタはどのように機能しますか?

分類Dev

C ++テンプレートの特殊化/部分的および完全

分類Dev

C ++テンプレートの特殊化char *およびValgrind

分類Dev

C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

Related 関連記事

  1. 1

    テンプレートメンバー関数はC ++でどのように機能しますか?

  2. 2

    関数のテンプレート控除はC ++でどのように機能しますか?

  3. 3

    将来の特殊化のために、C ++テンプレート関数を戻り値の型に依存しないようにする方法

  4. 4

    C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

  5. 5

    SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

  6. 6

    C ++エラーC2893:関数テンプレートの特殊化に失敗しました

  7. 7

    テンプレートテンプレートの部分的特殊化は、-std = c ++ 1zとg ++でのみ機能します

  8. 8

    エラーC2893:関数テンプレートVC ++ 2012の特殊化に失敗しました

  9. 9

    C ++:配列の関数テンプレートの特殊化

  10. 10

    関数テンプレートc ++の明示的な特殊化

  11. 11

    C ++ 20では、プログラム定義型のstdでの関数テンプレートの特殊化はできなくなりますか?

  12. 12

    sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

  13. 13

    C ++テンプレートでメンバー関数を部分的に特殊化できないのはなぜですか

  14. 14

    C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

  15. 15

    ポインターの関数/ constポインターの関数によるC ++テンプレートの部分的な特殊化に違いはありませんか?

  16. 16

    クラステンプレートの明示的な特殊化の定義は、C ++のどこに配置する必要がありますか?

  17. 17

    C ++テンプレート特殊化メンバー関数の定義

  18. 18

    C ++テンプレートの特殊化と関数の戻り値

  19. 19

    C ++テンプレートの特殊化と関数の戻り値

  20. 20

    C#の派生クラスのメンバー型をどのように特殊化しますか?

  21. 21

    C ++ 11は、同じテンプレート関数のさまざまな特殊化を呼び出すテンプレート関数の構文を単純化します

  22. 22

    C ++テンプレートの特殊化:operator()の戻り値の型を変更しますか?

  23. 23

    C ++-テンプレートクラスの特殊化に一般的なテンプレートのコードを含める方法はありますか?

  24. 24

    Cのような配列テンプレートの特殊化

  25. 25

    C ++ 20概念テンプレート関数の特殊化を使用する場合の依存関係

  26. 26

    Cの関数ポインタはどのように機能しますか?

  27. 27

    C ++テンプレートの特殊化/部分的および完全

  28. 28

    C ++テンプレートの特殊化char *およびValgrind

  29. 29

    C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

ホットタグ

アーカイブ