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

C++ 具有默认值的单参数构造函数是否可以进行隐式类型转换,c++,type-conversion,default-value,explicit,explicit-constructor,C++,Type Conversion,Default Value,Explicit,Explicit Constructor,我理解使用explicit关键字可以避免隐式类型转换,这种转换可能发生在单参数构造函数中,也可能发生在具有多个参数且只有第一个参数没有默认值的构造函数中。 但是我想知道,,当涉及隐式转换时,具有默认值的单参数构造函数的行为是否与没有默认值的构造函数的行为相同?默认值的存在并不会阻止单参数构造函数用于隐式转换:如果要停止该转换,则需要添加explicit 例如…: #include <iostream> struct X { int i; X(int j=23): i(j

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


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

默认值的存在并不会阻止单参数构造函数用于隐式转换:如果要停止该转换,则需要添加
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;
}

正确的说法是,如果希望
int
隐式地成为
struct X
=23
部分,即构造函数的一个参数的默认值,不会阻止此操作。

默认值的存在不会阻止单参数ctor用于隐式转换:如果要停止此操作,则需要添加
显式

例如…:

#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;
}

正确的说法是,如果希望
int
隐式地成为
struct X
=23
部分,即构造函数的一个参数的默认值,不会阻止此操作。

毕竟,具有默认值的单参数构造函数是“单参数构造函数”…毕竟,具有默认值的单参数构造函数是“单参数构造函数”。。。