+ 1
constructor object as reference
Hi Refer code below: #include <iostream> using namespace std; class test { public: test(int i){} }; int main() { [[maybe_unused]] const test& obj1 = test(1); [[maybe_unused]] const test obj2 = test(1); return 0; } What is the difference between obj1 and obj2? obj2 is not an reference , but obj1 is. Does this mean that obj2 will have copy constructor called? No, right..? So, what's difference? what does obj1 is referring to?
2 Answers
+ 2
obj1 is a reference to the temporary object created by test(1) constructor with no copy constructor called. This implies that the linkage and lifetime of the temporary object will be extended to obj1's due to the reference rule.
As for obj2, the copy constructor is definitely called. The process is called copy-initialization. A temporary object of test(1) was called and it's value got assigned to obj2
In obj1, a temporary object of test(1) was created and it becomes referenced by the l-value obj1
0
Hi Melle , Thanks.
I had doubt that it should not call copy constructor in both case.
Refer code below:
It has no call to copy constructor.
https://sololearn.com/compiler-playground/cFQz3j6m8A7x/?ref=app