У меня проблемы с распознаванием различий при инициализации объектов с помощью конструкторов.
Я также читал, что Бьярне рекомендует синтаксис {}, но в основном он эквивалентен синтаксису (), поэтому я думаю, что японять эту часть.
Проблема возникает в строке 40 с Car b();
.
#include <iostream>
#include <conio.h>
class Car
{
public:
Car() // initialize car
{
std::cout << "Default constructor called" << std::endl;
++carNumber;
}
~Car() // destroy car
{
--carNumber;
}
static int getCarNumber() { return carNumber; };
private:
static int carNumber;
};
int Car::carNumber = 0;
int main() {
// Equivalent
std::cout << "Car a{};" << std::endl;
Car a{};
std::cout << "Car d = Car{};" << std::endl;
Car d = Car{};
// Equivalent
std::cout << "Car e;" << std::endl;
Car e;
std::cout << "Car c = Car();" << std::endl;
Car c = Car();
std::cout << "Car b(); " << std::endl;
Car b(); // this line
std::cout << "CarNumber: " << Car::getCarNumber() << std::endl;
_getch();
return 0;
}
Это вывод программы:
Car a{};
Default constructor called
Car d = Car{};
Default constructor called
Car e;
Default constructor called
Car c = Car();
Default constructor called
Car b();
CarNumber: 4
I'mпутать с "Автомобиль б ()".Я думаю, что компилятор интерпретирует его как функцию, которая возвращает Car, но если это так, я не вижу, где может быть реализована функция (это должно вызвать ошибку? ").
Я ожидал"Car b () "для вызова конструктора по умолчанию, который я сделал, но это не так.