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 T
をT const
意味します。したがってconst T &
、T const &
まったく同じことを意味します。
参照を変更して他の何かを参照することはできないため、他の方法はあり得ません(「再装着可能」ではありません)。T const &
「別のTを参照するように変更できない参照」と読んだ場合、それは正しくありません。これは、「Tへの参照であり、そのTを変更するために使用することはできません(すべての参照と同様に、別のTを参照するように変更することはできません)」。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加