任何人都可以向我解释第五行的输出吗?我不明白为什么MyClass
对象b
没有从func
中分配返回对象c
。为什么我不能在此代码中获得返回值优化?
class MyClass
{
public:
int x;
std::string s;
MyClass(const MyClass &other);
MyClass();
void output();
};
MyClass::MyClass(const MyClass &other): x(2), s("s?") { }
MyClass::MyClass() : x(1), s("s1") { }
void MyClass::output() { cout << x << " " << s << endl; }
MyClass func(MyClass c) //MyClass c = Myclass(a)
{
cout << "2. in func: "; c.output();
c.s = "s2";
cout << "3. in func: "; c.output();
return c;
}
int main()
{
MyClass a;
cout << "1. "; a.output();
MyClass b = func(a);
cout << "4. "; a.output();
cout << "5. "; b.output();
}
输出是:
1. 1 s1
2. in func: 2 s?
3. in func: 2 s2
4. 1 s1
5. 2 s?
我明白的地方做线来自1-4,但我没有在最后知道为什么,在MyClass b.s
有s?
值不是s2
。是否因为在func
范围内创建了const
对象?
编辑: 我知道,当MyClass c
对象的func
范围内初始化拷贝构造函数被调用,但返回的对象是如何不分配给b
?
它不是S2因为'MyClass的B = FUNC(一);'要求'B'它初始化拷贝构造字符串成员?' –
我想你可能需要澄清为什么你对输出感到惊讶。你的问题比你可能意识到的更微妙,并且没有任何答案能够解决这个问题。提示:另一个标题可能是“为什么我不能在此代码中获得*返回值优化*?” – juanchopanza
@juanchopanza完成了,谢谢 –