Java и C # также не наследуют конструкторы (если только это не изменилось за последние несколько лет - я не думаю, что C ++ допускает это либо до c ++ 11), и D следует тем же рассуждениям, поэтому вы можете читать большепоиск вещей о них.
По сути, причина в том, что подклассы должны иметь свое собственное уникальное состояние - по крайней мере, такие вещи, как vtable, даже если вы не объявляете ни одну из своих собственных переменных - и, следовательно, уникальнуюТребуется конструктор. В противном случае вы можете иметь неинициализированные члены.
И если наследование прошло весь путь, так как Object имеет this (), new AnyClass();
скомпилирует и приведет к множеству недопустимых объектов. (В обычном D, если вы объявляете любой ctor с аргументами, он отключает автоматически сгенерированный нулевой аргумент.)
Теперь D теоретически может делать то же, что и C ++, и автоматически генерировать другие аргументы ... это просто не так. Вероятно, в основном потому, что это относительно новая идея в C ++, а система классов D. основана в основном на более старой системе Java.
Но все, что сказано, позвольте мне показать вам хитрость:
this(Args...)(auto ref Args args) { super(args); }
вставьте это в свой подкласс, и вы в основном наследуете все конструкторы родителя за один раз. Если супер не компилируется для заданных аргументов, то и этого не будет, поэтому он также не добавляет случайных вещей. Вы также можете перегрузить его более конкретными версиями, если это необходимо, так что это разумная небольшая замена встроенной языковой функции.