Термин «конструктор по умолчанию» является официальным как в Java, так и в C++, и, похоже, это означает другое в двух мирах. Могу ли я узнать, правильно ли я понимаю и что такое правильное обозначение некоторых связанных понятий?По умолчанию Constructor, Java vs C++
По умолчанию Конструктор в Java означает (No-Arg) Конструктор, генерируемый компилятором, когда нет конструктор, определенный для класса.
По умолчанию конструктор в C++ означает конструктор, который можно вызвать без аргумента.
Учитывая следующий пример
Java:
class NoCtorClass {
// No ctor defined, compiler is generating one --------- J-1
}
class NoArgCtorClass {
public NoArgCtorClass() { ... } -------------------------- J-2
}
C++:
class NoCtorClass {
// implicitly NoCtorClass() constructor is provided -------- C-1
}
class DefaultCtorClass {
public:
// Explicitly telling compiler to give the default one
DefaultCtorClass() = default; ---------------------------- C-2
}
class NoArgCtorClass {
public:
NoArgCtorClass(); ----------------------------------------- C-3
}
NoArgCtorClass::NoArgCtorClass() {....}
class NoArgCtor2Class {
public:
NoArgCtor2Class(int i = 0); -------------------------------- C-4
}
NoArgCtor2Class::NoArgCtor2Class (int i = 0) {....}
в Java, только J-1 официально называется конструктором по умолчанию, а J-2 - нет.
В C++ все C-1-C-4 официально называются конструктором по умолчанию.
Я правильно понял?
Если да, некоторые вопросы терминологии:
Что такое имя собственное в Java для CTOR без аргумента? (то есть J-1 и J2). Обычно я называю это No-Arg Constructor. (Для чего соответствует концепции default-ctor в C++)
Какое имя в C++ для ctor генерируется компилятором? (т. е. C-1 и C-2. С ключевым словом
default
, похоже, он должен быть назван по умолчанию. Тогда следует ли его называть «стандартным конструктором по умолчанию»? (для которого соответствует концепция default-ctor в Java)Аналогично 2, как мы должны называть компилятором Прописи т е р, оператор присваивания, и т.д.? «Default-Copy-конструктор»?
[Эта ссылка может помочь] (http://en.cppreference.com/w/cpp/language/default_constructor). И созданный компилятором конструктор по умолчанию - это созданный по умолчанию конструктор по умолчанию, для которого нет реального имени. –
@JoachimPileborg "дефолтный конструктор по умолчанию". –
Я подозреваю, что 'C++' получает свой термин 'конструктор по умолчанию 'из ситуаций, когда создатель объекта не может указывать аргументы конструктора (например, при создании массива), и поэтому вызывается конструктор' default' (no arg required). Это не проблема в Java, когда массивы объектов всегда содержат указатели, а не сами объекты. – Galik