C ++是否优化了构建和复制到复制构造函数中?(Does C++ optimise construction-and-copy into a copy constructor?)
C ++编译器是否自动转换:
MyObject object2 = object1;成
MyObject object2( object1 );?
还是它对待它:
MyObject object2; object2 = object1;?
Does a C++ compiler automatically convert:
MyObject object2 = object1;into
MyObject object2( object1 );?
Or does it treat it like:
MyObject object2; object2 = object1;?
最满意答案
你可以试试看看确切的行为:
#include <iostream> class MyObject { public: MyObject() { std::cout << "MyObject()" << std::endl; } MyObject(const MyObject& other) { std::cout << "MyObject(const MyObject& other)" << std::endl; } MyObject& operator=(const MyObject& other) { std::cout << "operator=(const MyObject& other)" << std::endl; return *this; } }; int main() { MyObject object1; MyObject object2 = object1; MyObject object3(object1); MyObject object4; object4 = object1; }输出:
MyObject() MyObject(const MyObject& other) MyObject(const MyObject& other) MyObject() operator=(const MyObject& other)除此之外,我建议阅读什么是三条规则?
You can try this to see the exact behavior:
#include <iostream> class MyObject { public: MyObject() { std::cout << "MyObject()" << std::endl; } MyObject(const MyObject& other) { std::cout << "MyObject(const MyObject& other)" << std::endl; } MyObject& operator=(const MyObject& other) { std::cout << "operator=(const MyObject& other)" << std::endl; return *this; } }; int main() { MyObject object1; MyObject object2 = object1; MyObject object3(object1); MyObject object4; object4 = object1; }Outputs:
MyObject() MyObject(const MyObject& other) MyObject(const MyObject& other) MyObject() operator=(const MyObject& other)Apart from that, I recommend reading What is The Rule of Three?
更多推荐
发布评论