我理解使用explicit关键字来避免单个参数构造函数可能发生的隐式类型转换,或者使用具有多个参数的构造函数,其中只有第一个参数没有默认值。
但是,我想知道,当涉及隐式转换时,具有默认值的单个参数构造函数是否与没有默认值的构造函数相同?
答案 0 :(得分:4)
默认值的存在不会阻止单参数ctor用于隐式转换:如果要停止,则需要添加explicit
。
例如......:
#include <iostream>
struct X {
int i;
X(int j=23): i(j) {}
};
void f(struct X x) {
std::cout << x.i << std::endl;
}
int main() {
f(15);
return 0;
}
编译并正确运行:
$ g++ -Wall -pedantic a.cc
$ ./a.out
15
$
正确地说,就是说,如果您希望 int
隐式成为struct X
。 =23
部分,即构造函数的一个参数的默认值,不会阻止它。