4

たとえば、次のスニペットはVC++2010でコンパイルされます。

template<int Rows, int Columns = Rows>
struct Matrix {  };

Matrix<4> m;

のデフォルトの引数Columnsは、の引数値に依存することに注意してくださいRows

しかし、C ++ 11(またはそれ以前)でのこの標準的な動作は、どこでも信頼できますか?

4

2 に答える 2

4

はい。そして実際のところ、それは大量のSTLコードがどのように機能するかです。

次のstd::vectorような定義があります。

 template < class T, class Alloc = allocator<T> > class vector

allocator毎回毎回指定する必要がないように。そのようなものが無効である場合、私たちは書くことができません:

std::vector<int> data;

そして、あなたは次のように書くでしょうstd::map

std::map < keyType,                                     // map::key_type
       ValType,                                       // map::mapped_type
       less<keyType>,                     // map::key_compare
       allocator<pair<const KeyType,ValType> >    // map::allocator_type
       > mapping;

これは、以下よりもはるかに望ましくありません。

std::map< keyType , ValType > mapping;
于 2013-02-16T05:48:29.690 に答える
2

cplusplusによると、はい:

クラステンプレートパラメータのデフォルト値またはタイプを設定することもできます。たとえば、以前のクラステンプレート定義が次の場合:

template <class T=char, int N=10> class mysequence {..};

そして、もっとありふれたメモとして、g++-Wallはそれをコンパイルします。

于 2013-02-16T05:42:47.310 に答える