C++ constructor not called

后端 未结 1 756
名媛妹妹
名媛妹妹 2020-12-10 19:25

In the following code the constructor is called only once (i.e.) when Car() executes. Why is it not called the second time on the statement Car o1(Car())?

#i         


        
相关标签:
1条回答
  • 2020-12-10 20:24
    Car o1(Car());
    

    This declares a function called o1 that returns a Car and takes a single argument which is a function returning a Car. This is known as the most-vexing parse.

    You can fix it by using an extra pair of parentheses:

    Car o1((Car()));
    

    Or by using uniform initialisation in C++11 and beyond:

    Car o1{Car{}};
    

    But for this to work, you'll need to make the parameter type of the Car constructor a const Car&, otherwise you won't be able to bind the temporary to it.

    0 讨论(0)
提交回复
热议问题