我理解使用explicit关键字来避免隐式类型转换,这种类型转换可能发生在单个参数构造函数中,或者在具有多个参数的构造函数中,只有第一个参数没有默认值。
然而,我想知道,当涉及到隐式转换时,具有默认值的单参数构造函数与没有默认值的构造函数的行为是否相同?
发布于 2010-05-06 01:09:04
缺省值的存在不会阻止单参数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部分,即构造函数的一个参数的默认值,不会阻止这一点。
https://stackoverflow.com/questions/2775277
复制相似问题