在我的代码中,我将内部类用作另一个类的迭代器。
为了简化这种情况,代码可以显示如下:
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
}
Run Code Online (Sandbox Code Playgroud)
问题在于,在test2()运行时A::B b = a.getB();,没有调用copy-constructor方法。并且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(); }
};
Run Code Online (Sandbox Code Playgroud)
为什么两种类型的C2440会完全相同?
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |