Вопрос: это неправильно расположенный там need
для if
wile
и do
, так как мы можем сделать все с только for
?
Технический ответ «нет, нет необходимости: факт, который мы можем сделать, не доказывает его». Но немного больше прагматизма показывает нам, что сокращение каждого потока управления в один ключевой код делает код сложнее отслеживать и следовать. Так что это технически возможно, но не всегда удобно.
В настоящее время: можем ли мы обходиться без глобальных объектов?
Первый отказ от ответа «да, с одноточием». Но singleton - это статический объект, полученный через функцию. Они не являются , что концептуально отличается, если не для дефекта дизайна (известный как «static initialization order fiasco») из-за того, что C++ не указывает глобальный порядок объектов инициализации, по существу, чтобы позволить нескольким единицам перевода сосуществовать в одном связанном исполняемом файле. Синглтон позволяет обойти эту проблему, но по существу является обходным решением, позволяющим создавать глобальные «вещи».
Существование этого недостатка (и техника одиночной моды) - это ват, что позволяет многим «учителям» нарисовать «моральное» учение как «никогда не использовать глобальные объекты, или пламя ада сожжет ваши задницы». Но это скоро произойдет std::cout << "hello world"
и сразу потеряет ВСЕ их авторитет.
Дела в том, что без «глобал» все «сфера местные» и нет «динамического размаха» в C++: если funcA
вызовов funcB
, funcB
не могут видеть funcA
местных жителей, следовательно, единственным способа получить доступ к вещам по прицелам является передача параметров ссылки или указателей.
В контексте, которые в основном являются «функциональными», недостающие «динамические области» компенсируются «захватами lamba», и все остальное будет проходить как параграф.
В контексте, который в основном является «процедурным», потребность в «состоянии», которая выживает в областях и может быть изменена при входе и выходе, более подходит для глобальных объектов. И вот в этом причина cout
. Он представляет собой ресурс, который ранее существовал и существовал в программе, состояние которой развивается по различным вызовам. Если нет глобального способа доступа к cout
, он должен быть инициализирован в main
, передан как ссылочный параметр для любого вызова функции: даже тот, у которого нет вывода, чтобы дать, поскольку они могут называть себя чем-то другим, у которого есть вывод, чтобы дать ,
Фактически вы можете думать глобальному объекту, как «неявные параметры, переданные каждой функции».
Вы можете деформировать глобальные функции, но сами функции могут быть объектами, а сам объект может быть функциональным - почему глобальные объекты являются плохими, а глобальные функции могут быть правильными?
Фактическая единственная причина, по сути, оказывается, чтобы быть static initialization order fiasco
Возможный дубликат [Singleton: Как это должно быть использовано] (http://stackoverflow.com/questions/86582/singleton-how- should-it-be-used) –
Вы посмотрели, почему и почему не использовать глобальные переменные? – P0W
Я не буду рекомендовать использовать глобальные переменные, если вам действительно нужен сиглтон, сделайте его одним. –