我理解使用 explicit 关键字来避免隐式类型转换,隐式类型转换可能发生在单个参数构造函数中,或者具有多个参数的构造函数中,只有第一个参数没有默认值。
但是,我想知道,在隐式转换方面,具有默认值的单参数构造函数的行为是否与没有默认值的构造函数相同?
最佳答案
默认值的存在不会阻止单参数 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
部分,即构造函数的一个参数的默认值,不会阻止此操作。
关于c++ - 具有默认值的单参数构造函数是否可以进行隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775277/