为什么我们不能在函数上使用显式关键字?我想不出有一个很好的理由不允许这样做(有几个相反)。
为什么会这样?
答案 0 :(得分:8)
通过声明函数的已删除模板版本,可以轻松实现您想要实现的目标(禁止对函数参数进行类型转换):
template <class T> void f(T) = delete;
void f(int){}
int main()
{
double k = 4;
f(k); //error: use of deleted function ‘void f(T) [with T = double]’
}
答案 1 :(得分:0)
explicit
用于指示函数不能用于执行隐式类型转换。由于类型转换只能使用构造函数和转换运算符(例如operator int()
)完成,因此explicit
仅在应用于这些转换符时才有意义。
历史记录:2011年之前,它无法应用于转换运营商;这被广泛认为是一个缺点,现在已经修复了。