Сборка не указана Ошибка компиляции в цикле foreach в представлении Razor

Причина заключается не столько в эффективности, сколько в безопасности исключений. Класс контейнера может использоваться для хранения любых объектов. Было бы невозможно реализовать pop_back () безопасным образом, если функция вернет объект после его удаления из контейнера, так как возврат значения объекта связано с построением копии.

Это фактическое реализация vector :: pop_back () в стандартной библиотеке GNU C ++:

  void
  pop_back()
  {
    --this->_M_impl._M_finish;
    this->_M_impl.destroy(this->_M_impl._M_finish);
  }

Это будет выглядеть так, как если бы он возвращал последний элемент в конце:

  value_type
  pop_back()
  {
    value_type save = back();
    --this->_M_impl._M_finish;
    this->_M_impl.destroy(this->_M_impl._M_finish);
    return save;
  }

Это включает в себя две структуры копирования, в операторе save = back() и при возврате копии объекта. Нет никаких гарантий того, что выражение return не будет генерировать исключение после уничтожения элемента из контейнера.

13
задан agc93 11 April 2015 в 08:27
поделиться