В C ++ такие функции, как исключения, влияют на всю вашу программу: вы можете либо отключить их во всей программе , либо вам нужно иметь дело с ними во всем коде. Как говорится в известной статье о C ++ Report :
Неудобно, что сложная часть исключений при кодировании - это не явные броски и ловушки. Действительно сложная часть использования исключений состоит в том, чтобы написать весь промежуточный код таким образом, чтобы произвольное исключение могло распространяться с его сайта выброса на его обработчик, поступая безопасно и без ущерба для других частей программы на этом пути.
Так как даже new
выбрасывает исключения, каждая функция должна обеспечивать базовую безопасность исключений - если только она не вызывает только функции, которые гарантированно не генерируют исключения - если вы полностью не отключите исключения во всем своем проекте .
Следовательно, исключения являются функцией «всей программы» или «всей команды», так как они должны быть понятны каждому в команде, использующей их. Но не все функции C ++ такие, насколько я знаю.
Возможный пример: если я не получаю шаблоны, но не использую их, я все равно смогу написать правильный C ++ - или нет? Я даже могу вызывать sort
массив целых чисел и наслаждаться его удивительным преимуществом в скорости. C qsort
(потому что не вызывается указатель на функцию), без риска ошибок - или нет? Кажется, шаблоны не являются "целой командой".
Существуют ли другие функции C ++, которые влияют на код, не использующий их напрямую, и, следовательно, являются «целой командой»? Меня особенно интересуют функции, отсутствующие в C.
Обновление : я особенно ищу функции, где нет языковых знаков, о которых вам нужно знать. В первом ответе я упомянул о правильности const, которая также является целой командой, поэтому каждый должен узнать об этом; однако, AFAICS, это повлияет на вас только в том случае, если вы вызовете функцию, которая помечена const
, и компилятор не позволит вам вызывать ее для неконстантных объектов, так что вы получите что-то, что нужно Google. За исключением, вы даже не получите это; кроме того, они всегда используются, как только вы используетеnew
, поэтому исключения более «коварны». Поскольку я не могу сформулировать это так объективно, я буду признателен за любую особенность всей команды.
Обновление 2 : вместо функции C ++ я должен был написать что-то вроде «C ++ - специфической функции», чтобы исключить такие вещи, как многопоточность, которые применяются к большому количеству основных языков программирования.
Приложение: Почему этот вопрос объективен (если вам интересно)
C ++ является сложным языком, поэтому многие проекты или руководства по кодированию пытаются выбрать «простые» функции C ++, и многие люди пытаются включить или исключить некоторые из них в соответствии в основном с субъективными критериями. Вопросы об этом регулярно закрываются здесь, на SO.
Выше я вместо этого определил (настолько точно, насколько это возможно), что такое языковая функция «для всей команды», приведу пример (исключения) вместе с обширным подтверждающим свидетельством в литературе о C ++ и запросил возможности для всей команды в C ++. за исключениями.
Должны ли вы использовать функции «целой команды», или это релевантная концепция, может быть субъективным - но это только означает, что важность этого вопроса субъективна, как всегда.