为什么我们不能将函数显式化?

时间:2013-08-22 14:26:05

标签: c++ keyword

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

为什么会这样?

2 个答案:

答案 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年之前,它无法应用于转换运营商;这被广泛认为是一个缺点,现在已经修复了。