Эквивалентный из IllegalArgumentException Java в C++

os.system принимает в качестве аргумента строку , поэтому вы можете использовать все, что изменяет строку. Например, форматирование строки :

os.system('shutdown -s -t 10 -c {0}'.format(s))

24
задан Srikanth 25 March 2009 в 14:14
поделиться

5 ответов

В отличие от Java, C ++ не имеет «стандартной структуры», а имеет лишь небольшую (и необязательную) стандартную библиотеку. Более того, у программистов на С ++ существуют разные мнения о том, следует ли вообще использовать исключения .

Поэтому вы найдете разные рекомендации от разных людей: некоторые любят использовать типы исключений из стандартной библиотеки, некоторые библиотеки (например, Poco) используют пользовательскую иерархию исключений (полученную из std :: exception), а другие не используют исключения вообще (например, Qt).

Если вы хотите придерживаться стандартной библиотеки, существует специальный тип исключения: invalid_argument (extends logic_error).

#include <stdexcept>

// ...
throw std::invalid_argument("...");

Для справки: Вот обзор стандартных типов исключений, определенных (и задокументированных) в stdexcept:

exception
    logic_error
        domain_error
        invalid_argument
        length_error
        out_of_range
    runtime_error
        range_error
        overflow_error
        underflow_error
44
ответ дан Ferdinand Beyer 28 November 2019 в 23:13
поделиться

Я всегда использую std::invalid_argument для незаконных аргументов.

2
ответ дан rlbond 28 November 2019 в 23:13
поделиться

Вы можете бросить стандартное исключение или бросить свое собственное. Возможно, вы захотите включить дополнительную информацию в создаваемое вами исключение, и это будет хорошим поводом сделать самостоятельно.

Лично я не видел такой проверки домена в системах, над которыми работал. Это, конечно, не универсально.

1
ответ дан David Thornley 28 November 2019 в 23:13
поделиться

станд.:: domain_error может быть тем, что Вы ищете, но я подозреваю, что очень немного людей используют его. Большинство людей получает свои собственные типы исключительной ситуации из станд.:: исключение.

2
ответ дан 28 November 2019 в 23:13
поделиться

Если недопустимым Вы имеете в виду, не делает удовлетворенных математических ожиданий метода, которые можно бросить

std::logic_error 
or 
std::runtime_error.

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

На самом деле это будет. Но только для dynamic_cast <> на ссылках. Это бросит

std::bad_cast

Я не уверен, что это - хорошая идея бросить этого Вашим собственным.

Я предпочитаю использовать logic_error и его производные в случае, если кто-то передал неправильный параметр, потому что это - логическая ошибка: программист передал неправильный тип аргумента.

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

1
ответ дан 28 November 2019 в 23:13
поделиться
Другие вопросы по тегам:

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