C/C++编程:显式构造函数(explicit )

如果类具有带一个参数的构造函数,或是如果除了一个参数之外的所有参数都具有默认值,则参数类型可以隐式转换为类类型(这样的构造函数也叫做隐式构造函数)。 例如,如果 Box 类具有一个类似于下面这样的构造函数:

Box(int size): m_width(size), m_length(size), m_height(size){
    
    }

可以初始化 Box,如下所示:

Box b = 42;

或将一个 int 传递给采用 Box 的函数:

class ShippingOrder
{
    
    
public:
    ShippingOrder(Box b, double postage) : m_box(b), m_postage(postage){
    
    }

private:
    Box m_box;
    double m_postage;
}
//elsewhere...
    ShippingOrder so(42, 10.8);

这类转换可能在某些情况下很有用,但更常见的是,它们可能会导致代码中发生细微但严重的错误。 作为一般规则,应使用explicit 在构造函数 (和用户定义的运算符) 上使用关键字,以防止这种隐式类型转换:(也就是显式构造函数)

explicit Box(int size): m_width(size), m_length(size), m_height(size){
    
    }

构造函数是显式函数时,此行会导致编译器错误:ShippingOrder so(42, 10.8);

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/115347489
今日推荐