这是一些有效的语法:
<>
它是如何工作的,它会自动推断出对象模板吗?为什么有必要在类型的末尾写<>
?我可以不删除user.php?rquest=add_user
并且它会是相同的吗?
答案 0 :(得分:21)
通常,当第一个和后一个参数或仅参数具有默认模板参数(如果它是一个整数的类型或值)时,可以使用它并且它可以工作。另一种情况是存在模板参数包时它是空的。
仍需要<>
将其标识为模板类型。
在此case the type is declared as;
template <class RealType = double>
class uniform_real_distribution;
因此,模板类RealType
的默认uniform_real_distribution
为double
。它等于std::uniform_real_distribution<double>
。
参考C++ WD n4527,§14.3/ 4(模板参数)
使用模板参数包或默认模板参数时, template-argument 列表可以为空。在这种情况下,空
<>
括号仍应用作 template-argument-list 。 [示例:template<class T = char> class String; String<>* p; // OK: String<char> String* q; // syntax error template<class ... Elements> class Tuple; Tuple<>* t; // OK: Elements is empty Tuple* u; // syntax error
- 结束示例]
答案 1 :(得分:5)
该类具有以下声明
template<class RealType = double>
class uniform_real_distribution;
如您所见,它具有double
所以这个宣言
std::uniform_real_distribution<> randomizer(0, 100);
相当于
std::uniform_real_distribution<double> randomizer(0, 100);