об исключениях C++. func () бросок ()

Мы можем использовать base R с sub для сопоставления символов, которые не являются ., за которыми следует . и пробел, если таковой имеется, заменить пробелами ("")

sub("^[^.]+\\.\\s*", "", text)
#[1] "I want to purchase clothes. Also, I want to buy shoes."
[119 ] и эквивалентный вариант в tidyverse будет

library(stringr)
str_replace(text, "^[^.]+\\.\\s*", "")
#[1] "I want to purchase clothes. Also, I want to buy shoes."
8
задан 2 March 2009 в 22:39
поделиться

4 ответа

См. эту статью для получения дополнительной информации о спецификациях исключения C++ и реализации Microsoft:

Microsoft Visual C++ 7.1 игнорирует спецификации исключения, если они не пусты. Пустые спецификации исключения эквивалентны __declspec(nothrow), и они могут помочь компилятору уменьшить размер кода.

[...], Если это будет видеть пустую спецификацию исключения, то это предположит, что Вы знаете то, что Вы делаете и оптимизируете далеко механику для контакта за исключениями. Если Ваша функция бросает так или иначе - хорошо, позор Вам. Используйте эту функцию, только если Вы на 100% положительны, что Ваша функция не бросает, и никогда не будет.

10
ответ дан 5 December 2019 в 11:27
поделиться

Выдача исключения недостаточно, Вам нужен a try {} catch() блок для ловли исключений. Если Вы не ловите исключения, std::terminate() назван и Ваша программа выходит резко. Не торопитесь и имейте, идут в этом.

0
ответ дан 5 December 2019 в 11:27
поделиться

То, что Вы находите, - то, что та версия VC ++ не осуществляла исключения спецификации. Я полагаю, что это было зарегистрировано как различие из стандарта.

Однако спецификации исключения обычно являются не хорошей идеей. Если программа нарушает их в приспосабливающей стандартам реализации (которым VC ++ из VS 2005 не был в этом случае), система, как предполагается, ловит его. Это означает, что спецификация не является подсказкой компиляторной оптимизации, а скорее вынуждает компилятор перейти к дополнительным длинам и иногда производить субоптимальный код.

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

4
ответ дан 5 December 2019 в 11:27
поделиться

спецификации броска разработаны в двух целях:

  1. Чтобы служить контрактом между реализованным интерфейсом и соединить интерфейсом с пользователем - Вы заявляете, какими исключениями может быть throwned из Вашего метода, некоторые люди считают это частью интерфейса. (контракт) контролируемые исключительные ситуации Алабамы в Java.

  2. Как способ сигнализировать о компиляторе, что это может применить определенную оптимизацию в случае, если никакие исключения не могут быть выданы из метода/процедуры (настраивающий обработку исключений стоит чего-то),

При выдаче исключения, не указанного в броске (), пункт является ошибкой, однако ни в каком смысле реализация, требуемая проверить его для Вас. На самом деле даже не возможно проверить, поскольку это включает все возможные исключения из подпрограмм Ваши вызовы подпрограммы. (возможно от других модулей) Это даже не возможно в единственном модуле, как легко уменьшается до проблемы остановки :)

0
ответ дан 5 December 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: