为什么会编译?
std::uniform_int_distribution<> dis(0, array.size() - 1);
但是类模板参数推导失败了?
std::uniform_int_distribution dis(0, array.size() - 1);
省略尖括号会产生什么语义差异?
这里:
std::uniform_int_distribution<> dis(0, array.size() - 1);
没有发生模板参数推导。使用默认模板参数
int
。
这里:
std::uniform_int_distribution dis(0, array.size() - 1);
编译器尝试从提供的参数中推导出模板参数。
0
属于 int
类型。我想 array.size()
是某种无符号类型。因此模板参数推导失败。如果 array.size()
实际上是 int
,CTAD 将推断出 int
。