为什么省略空尖括号时类模板参数推导会失败?

问题描述 投票:0回答:1

为什么会编译?

std::uniform_int_distribution<> dis(0, array.size() - 1);

但是类模板参数推导失败了?

std::uniform_int_distribution dis(0, array.size() - 1);

省略尖括号会产生什么语义差异?

c++ templates template-argument-deduction
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.