explicit
·cpp
#keywords
explicit
为什么函数声明时使用了explicit,但在函数实现时就不需要再加explicit了?
在C++中,explicit关键字用于构造函数或者单参函数声明处,以防止编译器进行隐式类型转换。当我们在类的头文件中声明构造函数时,如果希望该构造函数不能被隐式调用(例如不能用ClassName c = value;这种隐式转换方式来构造对象),就需要在声明时加上explicit。
一旦在类的声明(通常在头文件)中给构造函数添加了explicit,编译器对该函数的特性已经确定。在函数的实现(通常在cpp文件中)时,explicit的属性已由声明部分确定,不需要再次标注。即explicit只需要在函数的声明处出现一次,之后在实现定义处不需要重复。
在C++中,explicit关键字主要用于构造函数(以及转换运算符)的声明部分,以防止隐式类型转换。当你在类的头文件中声明一个构造函数时,如果在它前面加上explicit,表示该构造函数只能用于显式构造(即必须明确调用,而不是通过隐式转换)。 函数实现部分(通常在.cpp文件中)不需要重复写explicit的原因是,explicit是一个在函数**声明(即接口定义部分)**中才有意义的修饰符,它会影响调用语法和编译器的类型转换规则。在实现阶段(定义时),编译器已经知道该构造函数是explicit的,不需要再次标注。
简单来说:
explicit出现在类的头文件中(声明处),告诉编译器该构造函数不能被用于隐式转换。 函数实现部分只是对声明的实现,不需要也无法再次添加explicit,因为这不会改变调用方式或语言语义。