3

为什么我们不能在函数上使用显式关键字?我想不出一个很好的理由不允许这样做(还有几个相反)。

为什么是这样?

4

2 回答 2

10

您想要实现的目标(禁止函数参数的类型转换)可以通过声明函数的已删除模板版本轻松实现:

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]’
}
于 2013-08-22T14:36:53.177 回答
0

explicit用于指示函数不能用于执行隐式类型转换。由于类型转换只能使用构造函数和转换运算符(如operator int())来完成,因此explicit只有在应用于这些时才有意义。

历史注释:2011年之前,不能应用于转换算子;这被广泛认为是一个缺点,现在已得到修复。

于 2013-08-22T14:37:15.797 回答