1

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

但是,我想知道,在隐式转换方面,具有默认值的单个参数构造函数的行为是否与没有默认值的构造函数相同?

4

1 回答 1

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
$ 

正确,也就是说,如果您希望an隐含int地成为 a 。struct X=23部分,即构造函数的一个参数的默认值,不会阻止这一点。

于 2010-05-05T17:09:04.113 回答