Udostępnij za pośrednictwem


Nowoczesne C++ Programming Guide

C++ jest jednym z najczęściej używanych języków programowania na świecie.Dobrze napisane programów C++ są równie szybkie i wydajne.Język jest bardziej elastyczne niż inne języki, ponieważ służy do tworzenia szerokiej gamy aplikacji — od zabawnych i emocjonujących grach do wysokiej wydajności naukowych oprogramowania sterowników urządzeń, osadzony programów i aplikacji klienta systemu Windows.Ponad 20 lat C++ użyto do rozwiązania problemów, takich jak te i wiele innych.Co można nie wiedzieć, jest, że coraz większa liczba programistów C++ mają złożony błyskotliwy programowania stylu C wczoraj i mają założył zamiast nowoczesnych C++.

Jednym z pierwotne wymagania w zakresie języka C++ było zgodności z poprzednimi wersjami z języka C.Od tego momentu C++ rozwinęła się za pomocą kilku iteracji — C z klas, a następnie pierwotnej specyfikacji języka C++, a następnie wiele kolejnych rozszerzeń.Z powodu tego dziedzictwa C++ nazywa się często jako abstrakcję język programowania.W języku C++ można zrobić czysto proceduralnych programowania w stylu języka C, który obejmuje surowych wskaźników, tablice, ciągi znaków zakończony zerem, struktur danych niestandardowych i innych funkcji, które mogą umożliwić wysoką wydajność, ale także może mnożyć błędów i złożoności.Ponieważ programowanie stylu języka C jest obarczona zagrożeń takich jak te, był jednym z celów założenia dla języka C++ aby programy, zarówno typ palety i łatwiejsze do pisania, rozszerzanie i utrzymywania.Na początku C++ objął modele programowania, takich jak programowanie zorientowane obiektowo.Z biegiem lat funkcje zostały dodane do języka, łącznie z wysoce przetestowane standardowe biblioteki struktur danych i algorytmów.To te dodatki, które umożliwiły nowoczesne C++.

Wyróżniane są nowoczesne C++:

  • Zakres opartego na stosie zamiast stercie lub globalnego zakresu statycznego.

  • Wnioskowanie typu Auto zamiast nazw typem jawnym.

  • Sprytne wskaźniki zamiast surowych wskaźników.

  • std::stringi std::wstring typów (zobacz <string>) zamiast raw char[] tablic.

  • Standardowy szablon biblioteki jak kontenery (STL) vector, list, i map a nie raw tablic lub kontenerów niestandardowych.See <vector>, <list>, and <map>.

  • Algorytmy STL zamiast ręcznie kodowane jedynek.

  • Wyjątki do raportu i uchwyt błędów.

  • Blokada wolnego inter-thread komunikacji przy użyciu STL std::atomic<> (zobacz <atomic>) zamiast innych mechanizmów komunikacji inter-thread.

  • Wbudowany Funkcje lambda a nie funkcji małych realizowane oddzielnie.

  • Zakres oparty na pętle pisać solidniejszą pętli, współpracujących z tablicami, kontenerów STL, i Środowisko wykonawcze systemu Windows w postaci for (for-range-declaration :expression ). Jest to część obsługi języka podstawowego.Aby uzyskać więcej informacji, zobacz Range-based for — instrukcja (C++).

Także rozwinęła się języka C++.Porównaj następujące fragmenty kodu.Ten pokazuje, jak używać w języku C++:

// circle and shape are user-defined types
circle* p = new circle( 42 ); 
vector<shape*> v = load_shapes();

for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
    if( *i && **i == *p )
        cout << **i << “ is a match\n”;
}

for( vector<circle*>::iterator i = v.begin();
        i != v.end(); ++i ) {
    delete *i; // not exception safe
}

delete p;

Oto, jak to samo jest możliwe w nowoczesnych C++:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();

for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
    if( s && *s == *p )
        cout << *s << " is a match\n";
} );

W nowoczesnych C++ nie trzeba używać nowych/delete lub obsługi ponieważ Sprytne wskaźniki można użyć zamiast jawnego wyjątków.Podczas korzystania z auto wpisz potrącenia i funkcji lambda, można napisać kod szybciej, Dokręć go i lepiej ją zrozumieć.I for_each jest bardziej przejrzysty, łatwiejszy w obsłudze i mniej podatne na błędy niezamierzone niż for pętli.Napisać aplikację, można użyć szablonowe wraz z minimalnym linii kodu.I można dokonać tego kodu, wyjątek bezpieczny i pamięci i mieć żadnych kodów alokacji/dezalokacji lub błąd radzić sobie z.

Nowoczesne C++ zawiera dwa rodzaje polimorfizmu: kompilacji, za pośrednictwem szablonów i czasie wykonywania, poprzez dziedziczenie i wirtualizacji.Można łączyć dwa rodzaje polimorfizmu z dobrym skutkiem.Szablon STL shared_ptr używa wewnętrznego metod wirtualnych do wykonania jego usunięcie typu najwyraźniej wysiłku.Ale nie przez wykorzystanie wirtualizacji dla polimorfizmu gdy szablon jest lepszym wyborem.Szablony mogą być bardzo silne.

Jeśli pochodzi języka c++ w innym języku, szczególnie ze strony zarządzanych języka, w którym większość typów są typy odwołań i bardzo mało typy wartości, należy wiedzieć, że klasy C++ są typy wartości domyślne.Ale można je określić jako typy odwołań, aby włączyć zachowanie polimorficzna, która obsługuje programowanie zorientowane obiektowo.Pomocne perspektywy: typy wartości są, więcej informacji na temat pamięci i układ sterowania, typy odwołań są dodatkowe informacje o podstawowych klas i funkcji wirtualnych do obsługi polimorfizmu.Domyślnie do kopiowania są typy wartości — każdy z nich Konstruktor kopiujący i operatora.Po określeniu typu odwołania klasy upewnij się niekopiowalny — wyłączanie Konstruktor kopiujący i operatora — i używać destruktor wirtualny, który obsługuje polimorfizm.Typy wartości są również o treść, która, gdy są one kopiowane, daje dwie niezależne wartości, które można modyfikować oddzielnie.Ale typy odwołań są o tożsamości — co rodzaju obiektu jest — i z tego powodu są czasami określane jako typy polimorficzna.

C++ przeżywa odrodzenia, ponieważ moc jest król ponownie.Języków, takich jak Java i C# są dobre, gdy wydajność pracy programisty jest ważne, ale wykazują swoje ograniczenia, gdy moc i wydajność mają ogromne znaczenie.Dla wysokiej wydajności i mocy, zwłaszcza na urządzeniach, które mają ograniczone sprzętu nic nie może zastąpić nowoczesnego języka C++.

Nie tylko język jest nowoczesny, narzędzia programistyczne, są zbyt.Visual Studiosprawia, że wszystkie części cyklu projektowania mocne i sprawne.Zawiera narzędzia do zarządzania cyklem życia aplikacji (ALM), ulepszenia IDE, takich jak technologia IntelliSense, mechanizmów przyjazne narzędzie jak XAML i budynku, debugowanie oraz wiele innych narzędzi.

Artykuły w tej części dokumentacji zapewnienie wysokiego poziomu wytycznych i najważniejsze wskazówki dotyczące najważniejszych funkcjach i techniki pisania nowoczesnych programów C++.

Zobacz też

Informacje

Lambda wyrażenia w języku C++

Inne zasoby

Skorowidz języka C++

Biblioteka języka C++ wzorcowego