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++?
Base C[10](B);
Это неправильный синтаксис в C++; Вы не можете инициализировать массив простых объектов, передавая аргументы.
Base C[10];
тоже не будет работать. Вам также необходимо объявить конструктор по умолчанию, поскольку вы указали, что он принимает int как вход, поэтому по умолчанию он не создается.
Что касается меня, то я не вижу причин, почему эта конструкция
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 };
std::vector<Base> v(10, Base(10));