C++ 具有依赖于早期参数的默认模板参数是否有效?

C++ 具有依赖于早期参数的默认模板参数是否有效?,c++,templates,default-parameters,C++,Templates,Default Parameters,例如,以下代码段在VC++2010中编译: template<int Rows, int Columns = Rows> struct Matrix { }; Matrix<4> m; 模板 结构矩阵{}; 矩阵m; 请注意,列的默认参数取决于行的参数值 但是,这是C++11(或更早版本)中的标准行为,我在任何地方都可以依赖吗?根据,是的: 还可以为类模板参数设置默认值或类型。例如,如果以前的类模板定义为: template <class T=char, i

例如,以下代码段在VC++2010中编译:

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

Matrix<4> m;
模板
结构矩阵{};
矩阵m;
请注意,
的默认参数取决于
的参数值

但是,这是C++11(或更早版本)中的标准行为,我在任何地方都可以依赖吗?

根据,是的:

还可以为类模板参数设置默认值或类型。例如,如果以前的类模板定义为:

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

更普通的是,g++-Wall将编译它。

是的。事实上,这就是大量STL代码的工作原理

std::vector的定义如下:

 template < class T, class Alloc = allocator<T> > class vector
您可以将
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制图;
这远不如:

std::map< keyType , ValType > mapping;
std::mapmapping;
std::map< keyType , ValType > mapping;