Re[16]: А С++ то схлопывается...
От: so5team https://stiffstream.com
Дата: 02.11.19 11:18
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Пятый раз повторяю, что это не сработает, потому что нет способа запретить "лишним" конструкциям попадать в проект.


В принципе, есть. Начиная от code-review, заканчивая использованием специализированных автоматических инструментов (вроде как PVS-Studio может проверять код на соответствие MISRA C и MISRA C++).

Pzz>Их там технически нет, видимость одна. То, как в C++ устроено управление памятью, не позволяет в общем случае при замыкании прихватить любую переменную из локальной области видимости.


Тем не менее, они есть (в отличии от C) и позволяют делать разные полезные штуки, вроде Go-шных defer или D-шных at_scope_exit.

И это мы еще не рассматривали такие мощные инструменты для создания абстракций, как классы и шаблоны. Например, как вы в чистом C выразите абстракцию "значение в заданном диапазоне", которая на C++ делается влет простым шаблоном вроде:
template<class T, T Left, T right>
class constrained_value {
  T v_;
public:
  explicit constrained_value(T v) : v_(v) {
    if( !(v_ >= Left && v_ <= Right) )
      throw ...; // Или вызов abort.
  }

  operator T() const { return v_; }
};

using my_range = constrained_value<short, -500, 500>;

my_range get_current_value() {...}


Причем для написания такой примитивной версии не нужно больших познаний в языке. Они потребуются если захочется сделать constrained_value более универсальным и способным работать с разными типами, в том числе и не такими тривиальными, как short или long.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.