gpt4 book ai didi

c++ - 复制构造方法的用法?

转载 作者:太空狗 更新时间:2023-10-29 19:45:15 25 4
gpt4 key购买 nike

在我的代码中,我使用内部类作为另一个类的迭代器。

为了简化情况,代码可以如下所示:

class A {
public:
class B {
public:
explicit B(void):idx(3){}
B(const B&b) {
idx = 4; // never be called
}
private:
int idx=0;
};
B getB()
{ return A::B(); }
};
void test2(){
A a;
A::B b = a.getB(); // b.idx ends with value of 3
}

问题是,在 test2() 中,在运行 A::B b = a.getB(); 时,复制构造方法不是叫。 b 以值 3 结尾。这是为什么?

另一个问题让我很困惑

class A {
public:
class B {
public:
explicit B(void):idx(3){}
explicit B(const B&b) {} // C2440, cannot convert from "A::B" to "A::B"
private:
int idx=0;
};
B getB()
{ return A::B(); }
};

为什么C2440会出现两种完全相同的类型?

最佳答案

您看到的是 copy elision .为了使优化器更容易加速生成的代码,C++ 标准允许在某些情况下跳过复制构造函数。

关于c++ - 复制构造方法的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com