具有默认值的单个参数构造函数是否可以进行隐式类型转换

时间:2010-05-05 17:04:59

标签: c++ type-conversion default-value explicit explicit-constructor

我理解使用explicit关键字来避免单个参数构造函数可能发生的隐式类型转换,或者使用具有多个参数的构造函数,其中只有第一个参数没有默认值。

但是,我想知道,当涉及隐式转换时,具有默认值的单个参数构造函数是否与没有默认值的构造函数相同?

1 个答案:

答案 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部分,即构造函数的一个参数的默认值,不会阻止它。