Aracılığıyla paylaş


Modern C++ Programlama Kılavuzu

c++ dünyadaki en yaygın olarak kullanılan programlama dilleri biridir. İyi yazılmış c++ programları hızlı ve verimlidir. Çünkü, çok çeşitli uygulamalar oluşturmak için kullanabileceğiniz diğer dillere göre daha esnek dilidir; eğlenceli ve heyecan verici oyunlar, aygıt sürücüleri, katıştırılmış program ve Windows istemci uygulamaları için yüksek performanslı bilimsel yazılım. c++ 20 yıldan fazla için bu ve diğer pek çok benzer sorunları çözmek için kullanıldı. Değil de biliyor sayısı giderek artan c++ ile program geliştirenler, dün dowdy c stili programlama yukarı Katlanmış ve bunun yerine modern c++ donned olmasıdır.

c dili ile geriye dönük uyumluluk c++ özgün gereksinimlerden biri oldu. O zamandan beri birçok c++ geliştiğinin — c sınıfları, sonra özgün c++ dil belirtimine ve ardından sonraki birçok geliştirmesi. Bu miras c++ genellikle multi-paradigm bir programlama dili adlandırılır. C++'da, ham işaretçiler, diziler, biten karakter dizeleri, özel veri yapıları ve mükemmel performans sağlayabilir, ancak hataları ve karmaşıklığı da oluşturabilir diğer özellikleri kapsar tamamen yordam c stili programlama yapabilirsiniz. c stili programlama ile perils bu gibi fraught olduğu için programların denkliği hem yazmak, genişletmek ve bakımını daha kolay hale getirmek için c++ kuruluş amaçlarından biri oldu. Erken açık, c++ programlama paradigmasını gibi nesne yönelimli programlama embraced. Yıllar geçtikçe dili ile birlikte yüksek oranda test standart kitaplıkları, veri yapıları ve algoritmalar, özellik eklenmiştir. Bu modern c++ stil olası yapılan bu eklemeler olur.

Modern c++ vurgular:

  • Yığın tabanlı kapsam öbek veya statik genel kapsamlı yerine.

  • Tür çıkarımı otomatik açık tür adları yerine.

  • Ham işaretçileri yerine akıllı işaretçiler.

  • std::stringve std::wstring türleri (bkz: <string>) yerine ham char[] diziler.

  • Standart Şablon Kütüphanesi (stl) kapsayıcı ister vector, list, ve map ham diziler veya özel bir kapsayıcı yerine. See <vector>, <list>, and <map>.

  • stl algoritmaları olanları yerine el ile kodlanmış.

  • Özel durumlar, rapor ve tanıtıcı hata koşulları için.

  • Kilidi serbest stl kullanarak, inter-thread iletişim std::atomic<> (bkz: <atomic>) yerine diğer inter-thread iletişim mekanizmaları.

  • Satır içi lambda işlevleri yerine ayrı ayrı uygulanan küçük işlevler.

  • Aralık tabanlı diziler, stl kapsayıcılar, çalışma daha sağlam döngüler yazmak döngü için ve Windows Çalışma Zamanı koleksiyonları formunda for (for-range-declaration :expression ). Çekirdek dil desteğinin bir parçası olmasıdır. Daha fazla bilgi için bkz. Range-based for Deyimi (C++).

c++ dili de geliştiğinin. Aşağıdaki kod parçacıkları karşılaştırın. Bu bir şey c++'ta olması için nasıl kullanılacağını gösterir:

// 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;

İşte modern C++'ta aynı şeyi nasıl gerçekleştirilir:

#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";
} );

Modern C++'da, yeni/delete veya açık özel durum işleme bunun yerine akıllı işaretçiler kullanabilirsiniz çünkü kullanmak zorunda değilsiniz. Kullandığınızda, auto kesintisi yazın ve lambda fonksiyonu, daha hızlı, kod yazabilirsiniz, sıkılaştıran ve daha iyi anlamak. Ve for_each daha temiz, daha kolay kullanılır ve istenmeyen hataları daha az eğilimi olan bir for döngü. Demirbaş ile birlikte çok az kod satırlarını, sizin app yazmak için kullanabilirsiniz. Bu kodun özel durum-güvenli ve güvenli bellek yapmak ve ile başa çıkma konusunda hiçbir ayırma/ayırmayı kaldırma veya hata kodları ve.

Modern c++ çok biçimlilik iki tür içerir: derleme zamanı, Şablonlar aracılığıyla ve çalışma zamanı, devralma ve sanallaştırma aracılığıyla. Çok biçimlilik mükemmel etkili olması için iki tür karıştırabilirsiniz. stl şablon shared_ptr , görünüşe göre kolay türü silinme gerçekleştirmek için iç sanal yöntemleri kullanır. Ancak bir şablon daha iyi bir seçimdir, çok biçimlilik için sanallaştırma over-use yoktur. Şablonları çok güçlü olabilir.

Başka bir dilden dilden türlerinin çoğu başvuru türleridir ve çok az olduğundan değer türleri, özellikle bir yönetilen C++'a gelen varsayılan değer türleri c++ sınıfları olduğunu bilmek. Ancak, nesne yönelimli programlamayı destekler biçimli davranışını etkinleştirmek için başvuru türleri belirtebilirsiniz. Yararlı bir bakış açısı: bellek ve Düzen denetimi, başvuru türleri hakkında daha fazla temel sınıflar ve çok biçimlilik desteklemek için sanal işlevler hakkında daha fazla değer türleri şunlardır. Varsayılan olarak, değer türleri copyable — her bir kopya oluşturucusuna ve kopyayı atama işleci sahiptirler. Bir başvuru türü belirttiğinizde, sınıf copyable olmayan olun — kopya oluşturucusuna ve kopyayı atama işleci devre dışı — ve çok biçimlilik destekler sanal bir yıkıcıyı kullanın. Değer türleri de kopyalandığında, hangi, ayrı ayrı değiştirebilirsiniz iki bağımsız değerler size içeriği hakkında altındadır. Ancak başvuru türleridir kimliği konusunda — ne tür nesne ise — ve bu nedenle çok biçimli türleri olarak adlandırılır.

King yeniden güç olduğu için c++ bir Rönesans yaşıyor. Java ve C# gibi dillerde Programcı verimliliğini önemlidir, ancak güç ve performansı önemli olduğunda bunlar sýnýrlamalarý göstermek iyi. Güç, özellikle sınırlı donanım, aygıtlar ve yüksek verimlilik için hiçbir şey modern c++ vuruş.

Sadece dili modern, geliştirme araçları, çok. Visual StudioGeliştirme döngüsü tüm parçaları, sağlam ve verimli hale getirir. Uygulama Yaşam Döngüsü Yönetimi (alm) araçları, IntelliSense gibi IDE geliştirmeleri, xaml ve hata ayıklama, bina, gibi kullanımı kolay mekanizmalar içerir ve birçok diğer araçlar.

Belgelerin bu bölümü makalelerinde üst düzey yönergeleri ve en önemli özellikleri için en iyi yöntemler ve modern c++ programlarını yazma teknikleri sağlar.

Ayrıca bkz.

Başvuru

Lambda ifadeleri C++

Diğer Kaynaklar

C++ Dil Başvurusu

Standart C++ Kitaplık Başvurusu