В своем коде я использовал inner-класс в качестве итератора для другого класса.
Чтобы упростить ситуацию, код можно отобразить следующим образом:
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 встречается с двумя типами абсолютно одинаково?