C++;初始化类类型时,是否要将一个用户定义类型转换为另一个用户定义类型? C++中可以做的隐式转换有什么限制吗? 如果是,那么隐式转换在什么上下文中发生?

C++;初始化类类型时,是否要将一个用户定义类型转换为另一个用户定义类型? C++中可以做的隐式转换有什么限制吗? 如果是,那么隐式转换在什么上下文中发生?,c++,implicit-conversion,C++,Implicit Conversion,中只允许一个。(顺便说一句,标准转换没有这样的限制。)workw=“std”执行时,需要两个用户定义的转换,一个从char const*到Gadget,一个从Gadget到Work 工作w(“标准”)执行,只需要一个用户定义的转换(从char const*到Gadget),然后将转换后的Gadget直接传递给Work的构造函数来构造w 复制初始化中的隐式转换必须直接从初始值设定项生成T,而例如,直接初始化要求从初始值设定项隐式转换为T的构造函数的参数 在工作中,w=工作(“标准”),临时工作被显

中只允许一个。(顺便说一句,标准转换没有这样的限制。)
workw=“std”执行时,需要两个用户定义的转换,一个从
char const*
Gadget
,一个从
Gadget
Work

工作w(“标准”)执行,只需要一个用户定义的转换(从
char const*
Gadget
),然后将转换后的
Gadget
直接传递给
Work
的构造函数来构造
w

复制初始化中的隐式转换必须直接从初始值设定项生成
T
,而例如,直接初始化要求从初始值设定项隐式转换为
T
的构造函数的参数

工作中,w=工作(“标准”)
,临时
工作
被显式构造为
工作(“std”)
(其工作原理如上所述),然后从临时
工作
复制初始化
w


工作中,w=小工具(“标准”)
,临时
小工具
被显式构造为
小工具(“std”)
,然后从临时
小工具
复制初始化
w
;其中只需要一个用户定义的转换(从
小工具
工作
)。

感谢您的快速响应。我想在初始化中澄清一件事,如果在=之前是direct,在=之后是copy。是吗?@Vegeta您可以查看我发布的链接页面,其中列出了直接初始化和复制初始化的所有语法,这样您就可以很容易地区分它们。当然,谢谢您的帮助that@Ted对不起,迟到了
#include <iostream>

struct Gadget
{
  Gadget() { puts("Gadget default"); }
  Gadget(char const *a) { puts("Gadget-const char* constructor"); }
  Gadget(Gadget const &other) { puts("Gadget copy"); }
  ~Gadget() { puts("\nGadget destruction"); }
};

struct Work
{
  Work() { puts("default"); }
  Work(const Gadget &a) { puts("Work-Gadget constructor"); }
  // Work(char const *a) { puts("Work-const char* constructor"); }
  Work(Work const &other) { puts("copy"); }
  ~Work() { puts("\nWork destruction"); }
};

int main()
{
  using namespace std;
  Work w = "std";  // error here;
}
Work w("std"); // works fine
Work w = Gadget("std"); // works fine
Work w = Work("std"); // works fine