C++ 复制构造函数隐式转换问题

C++ 复制构造函数隐式转换问题,c++,copy-constructor,copy-initialization,C++,Copy Constructor,Copy Initialization,部分答案见 1类 { 私人: int i; 公众: foo1() { i=2; } int geti(){ 返回i; } }; 第二类 { 私人: int j; 公众: explicit foo2(foo1&obj1)//由于我想了解其行为,因此此构造函数没有故意使用'const'。 { 库特 以下解释对复制初始化是否正确 不是。您省略了foo2的副本的定义。这意味着编译器会自动为您合成一个副本。合成版本将由const foo2&获取。因此,问题不在于将临时foo2绑定到非const引用 事实上

部分答案见

1类
{
私人:
int i;
公众:
foo1()
{
i=2;
}
int geti(){
返回i;
}
};
第二类
{
私人:
int j;
公众:
explicit foo2(foo1&obj1)//由于我想了解其行为,因此此构造函数没有故意使用'const'。
{
库特
以下解释对复制初始化是否正确

不是。您省略了
foo2
的副本的定义。这意味着编译器会自动为您合成一个副本。合成版本将由
const foo2&
获取。因此,问题不在于将临时
foo2
绑定到非const引用

事实上,复制初始化不再创建临时对象,甚至不必表现为临时对象的存在。相反,初始化的形式只是将
explicit
关键字考虑在内

这两个

foo2 obj2(obj1); 
foo2 obj22=obj1; 
执行相同的重载解析,该解析只能选择相同的c'tor(
foo2(foo1&obj1)
)。它应该选择此c'tor,因为您为参数传递了一个非常量左值


区别?直接初始化允许使用显式c'tor。而复制初始化则不允许。因此,显式c'tor不是候选对象,重载解析失败。

它不是复制c'tor。根据定义,复制c'tor使用与其构造类型相同的参数。您的不允许。是的,您是对的。将其视为任何其他参数呃构造器,为什么行为上的差异我认为这部分答案是我要寻找的要点,而当选择显式c'tor时,复制初始化被认为是不正确的。你能解释一下吗,参考文献on@anurag86-看,还有。我需要解释一下。
foo2 obj2(obj1); 
foo2 obj22=obj1;