W C ++ funkcje takie jak wyjątki wpływają na cały program: możesz je wyłączyć w całym programie lub musisz postępować z nimi w całym kodzie. W słynnym artykule na temat C ++ Report :
Wbrew intuicji, trudną częścią kodowania wyjątków nie są jawne rzucanie i łapanie. Naprawdę trudną częścią korzystania z wyjątków jest napisanie całego interweniującego kodu w taki sposób, aby arbitralny wyjątek mógł rozprzestrzenić się z jego strony rzutowania do jego programu obsługi, docierając bezpiecznie i bez uszkadzania innych części programu po drodze.
Ponieważ nawet new
generuje wyjątki, każda funkcja musi zapewniać podstawowe bezpieczeństwo wyjątków - chyba że wywołuje tylko funkcje, które gwarantują brak wyjątku - chyba że całkowicie wyłączysz wyjątki w całym projekcie .
Dlatego wyjątki są funkcją „całego programu” lub „całego zespołu”, ponieważ muszą być zrozumiałe dla każdego w zespole, który ich używa. Ale o ile wiem, nie wszystkie funkcje C ++ są takie.
Możliwym przykładem jest to, że jeśli nie otrzymam szablonów, ale ich nie użyję, nadal będę w stanie napisać poprawne C ++ - czy nie? Mogę nawet przywołać sort
szereg liczb całkowitych i cieszyć się niesamowitą przewagą prędkości wrt. C qsort
(ponieważ nie jest wywoływany wskaźnik funkcji), bez ryzyka błędów - czy nie? Wygląda na to, że szablony nie są „całym zespołem”.
Czy istnieją inne funkcje C ++, które wpływają na kod, który ich nie używa bezpośrednio, a zatem są „całymi zespołami”? Szczególnie interesują mnie funkcje nieobecne w C.
Aktualizacja : szczególnie szukam funkcji, w których nie ma znaków wymuszonych językowo, o których musisz wiedzieć. Pierwszą odpowiedź, o której wspomniałem, jest ciągła poprawność, która obejmuje również cały zespół, dlatego wszyscy muszą się o tym dowiedzieć; jednak AFAICS wpłynie na ciebie tylko wtedy, gdy wywołasz funkcję, która jest oznaczona const
, a kompilator uniemożliwi ci wywoływanie jej na obiektach innych niż const, więc masz coś do znalezienia w Google. Z wyjątkami nawet tego nie rozumiesz; co więcej, są one zawsze używane, gdy tylko z nich skorzystasz new
, stąd wyjątki są bardziej „podstępne”. Ponieważ nie mogę tego sformułować jako obiektywnego, docenię każdą funkcję całego zespołu.
Aktualizacja 2 : zamiast funkcji C ++ powinienem napisać coś takiego jak „funkcja specyficzna dla C ++”, aby wykluczyć takie rzeczy, jak wielowątkowość, która dotyczy dużej liczby głównych języków programowania.
Dodatek: Dlaczego to pytanie jest obiektywne (jeśli się zastanawiasz)
C ++ jest złożonym językiem, więc wiele projektów lub przewodników kodowania próbuje wybrać „proste” funkcje C ++, a wiele osób próbuje włączyć lub wykluczyć niektóre z nich w oparciu o głównie subiektywne kryteria. Pytania na ten temat są prawidłowo zamykane tutaj, na SO.
Powyżej natomiast zdefiniowałem (tak dokładnie, jak to możliwe), czym jest funkcja językowa „całego zespołu”, podaję przykład (wyjątki) wraz z obszernymi dowodami w literaturze na temat C ++ i proszę o funkcje całego zespołu w C ++ poza wyjątkami.
To, czy powinieneś użyć funkcji „całego zespołu”, czy też jest to istotna koncepcja, może być subiektywne - ale to oznacza, że jak zawsze znaczenie tego pytania jest subiektywne.