Скопируйте конструктор на массив объектов

0
class Base
    {
    public:
        int i;
        Base(int j):i(j){}
    };

    int main()
    {
        Base B(10);
        Base C[10](B);//throws error saying bad array initializer
    }

Когда я попытался скомпилировать этот код, вышеупомянутая ошибка была брошена.

Почему C++ не компилирует этот код?

Почему каждый объект не может называть его конструктором копии по умолчанию и использовать значение члена B?

Я что-то пропустил в стандарте C++?

  • 1
    Вы можете сделать это с вектором: std::vector<Base> v(10, Base(10));
  • 0
    Вы можете использовать список инициализатора, но это не будет иметь поведение, которое вы хотите
Показать ещё 2 комментария
Теги:
copy-constructor

3 ответа

2
Base C[10](B);

Это неправильный синтаксис в C++; Вы не можете инициализировать массив простых объектов, передавая аргументы.

0
Base C[10];

тоже не будет работать. Вам также необходимо объявить конструктор по умолчанию, поскольку вы указали, что он принимает int как вход, поэтому по умолчанию он не создается.

0

Что касается меня, то я не вижу причин, почему эта конструкция

Base C[10](B);

Или, например, следующие

Base *C = new Base[10]( 8 );

не может быть действительным. Это зависит только от того, как вы хотите определить семантику.

Однако исторически для инициализации агрегатов в C++ используется список бит-init.

Таким образом, вы можете написать

Base C[10]{ B, 8, 8, 8, 8, 8, 8, 8, 8, 8 };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню