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