C++ constructor not called

c++, class

Solution

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.

Problem

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())? ``` #include <stdio.h> #include <iostream> class Car { public : Car() { std::cout << "Constructor" << '\n'; } Car(Car &obj) { std::cout << "Copy constructor" << '\n'; } }; int main() { Car(); Car o1(Car()); // not calling any constructor return 0; } ```

Original source