Почему конструктор не может быть объявлен как static в C++?

Я недавно закончил читать 1-й том. мышления в C++ Брюс Эккель и теперь стали применять знания на практике.

недавно я работал со статическими функциями-членами и попытался сделать конструктор статическим, за что компилятор был недоволен. Я проверил причину в книге, но ничего не нашел.

может кто-нибудь объяснить, почему?

П. С.: После просмотра некоторых ответов, я хотел бы отметить, что путаница возникает из-за того, что я знаю, что C# (и Java) позволяет конструкторам объявляться как статические.

4 ответов


целью конструктора является инициализация содержимого экземпляр класса.

статические методы не имеют связанного с ними экземпляра.

следовательно, нет такой вещи, как статический конструктор.


язык как таковой не обеспечивает такой функциональности, но может быть смоделирован косвенно. См.ответ для более подробной информации. Не то, чтобы я действительно уверен, зачем вам нужно было это делать.


функция-член конструктора создает объект, как указано, используя существующее распределение -- т. е. this присутствует.

static функции-члены не указывают хранения для объекта, поэтому нет связанного экземпляра для построения -- т. е. this отсутствует. Таким образом, нельзя указать статический конструктор.

возможно, вы ищете именованную статическую функцию-член, которая возвращает экземпляр по значению:

class t_object {
public:
  static t_object Func(…optional parameter list…) {
    t_object result(…ctor parameters…);
    …initialize result…
    return result;
  }
  ...
};

одна очень полезная функция C++ над C-это правильный способ правильной инициализации и очистки, когда создаются экземпляры определенного пользователем типа, чтобы у вас был хорошо сформированный объект, готовый начать работу.

язык достигает этого через механизм конструкторов и деструкторов.

Как вы можете заметить, причина, по которой существуют конструкторы и деструкторы, заключается в поддержании созданных экземпляров.

теперь static подразумевает или, по-крайней мере, используется, когда есть что-то общее, что все объекты могут использовать. Вы используете его, когда действительно есть что-то, что должно быть разделено между всеми экземплярами класса, который вы создаете.

и интерфейса к статическим членам данных класса осуществляется через статические функции-члены, которые в основном используются на статические данные-члены.

Итак, если конструктору разрешено быть статическим, что он должен возможно, это означает, что определение, данное ему, делая его статическим, является still в строках причины, по которой он вошел в изображение(чтобы правильно инициализировать объект, прежде чем вы его получите). Итак, если нет объекта, то нет смысла иметь конструктор/деструктор.

Если вы думаете о приведенных выше строках, нет смысла разрешать конструкторам быть статичными, по крайней мере, в этом случае(в C++). Следовательно, он не поддерживается этим языком.