C++ 具有依赖于早期参数的默认模板参数是否有效?
例如,以下代码段在VC++2010中编译: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
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;