C++ Nedir?

  • Konuyu Başlatan M5
  • Başlangıç tarihi
  • Cevaplar : 3
  • Görüntüler : 190 -
    Etiketler:

M5

Revaha ÇELİK
Kayıtlı Kullanıcı
Katılım
10 Ağustos 2025
Mesajlar
174
Puanı
18
Yaş
38
Konum
06 - Ankara
Web
www.sohbetly.org
Eğitim
Beykent Universitesi Mimarlık Fakültesi
İlgi Alanı
ArabaSürmek,
Cinsiyet
Erkek
Takım
CNBHo3
Medeni
Bekar
C++

C++ Standard Komitesi'nin onayladığı logo
Çok paradigmalı: , , , , , ,
İlk çıkışı1985 (40 yıl önce)
Tasarımcı
Bjarne Stroustrup

ISO/IEC JTC1/SC22/WG21
ISO/IEC 14882:2024 (19 Ekim 2024 (9 ay önce))
/ (19 Mart 2023)
, , , , , ,
,
,
,
,
,
,
Mevcut
Etkilendikleri , , , , ,
Etkiledikleri , , , , , , , , , ,
Olağan .C .cc cpp .cxx .c++
.H .hh .hpp .hxx .h++ .h
.cppm .ixx
Ailesi
Bjarne Stroustrup, C++ dilinin yaratıcısı, AT&T New Jersey'deki ofisinde, y. 2000
C++ ( , telaffuz: si pılas pılas), tarafından 1979 yılında geliştirilmeye başlanmış, 'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir .

İlk olarak C With Classes (Sınıflarla C) olarak adlandırılmış, 1983 yılında ismi C++ olarak değiştirilmiştir. Günüzümüzde en çok kullanılan programlama dillerinden biri olmuştur.

C++ tasarlanırken ile olabildiğince uyumlu olması göz önüne bulundurulmuş ve 'deki tüm örnek kodun derleneceği şekilde tasarlanmıştır.

C++, C'nin sağladığı alt seviye sıkı donanım desteğinin yanında farklı veri türleri, sınıf, template, sıradışı durum yönetimi, isim alanı (namespace), işleç fazladan yüklemesi, fazladan yüklemesi, referans, hafıza yönetimi ve pek çok kütüphane imkanı sunar.

Tarihi​

1979 senesinde bir Danimarkalı olan , sonradan C++ olarak bilinecek olan "C with " üzerinde çalışmaya başladı. Onu yeni bir dil geliştirmeye iten şey, doktora tezini geliştirirkenki programlama deneyimiydi. Stroustrup, 'nın büyük yazılımlar geliştirmeye yardımcı olan pek çok özelliğe sahip olduğunu, fakat dilin pratikte kullanım için fazla yavaş kaldığını, 'in ise hızlı ancak büyük yazılımlar geliştirmek için fazla alt-seviye olduğunu fark etti. Stroustrup 'ta çalışmaya başladığında bir sistem olarak incelemeye başladı. Doktora deneyiminden yola çıkarak, dilini 'nın özellikleriyle zenginleştirmek için yola çıktı. C dili seçildi çünkü genel amaçlı, hızlı, taşınabilir ve zaten yaygın olarak kullanılıyordu.

Başlangıçta, Stroustrup'un "C with Classes"ı sınıflar, türetilmiş sınıflar, güçlü türleme (strong typing), varsayılan fonksiyon argümanları (default argument) gibi özelliklerini bir C derleyicisi olan CPre'ye eklenmiştir.

1982'de Stroustrup C with Classes'ı daha da ileri taşıyan, pek çok diğer isimlendirmelerden sonra "C++" (++ C'deki artırma operatörüdür) olarak anılan dili geliştirdi. Sanal fonksiyon, fonksiyon adı ve operatör fazladan yüklenmesi, referanslar, sabit oluşturma (constant), tür-güvenli bellek tahsisi (new ve delete kullanarak), geliştirilmiş tür kontrolü, BCPL'deki gibi iki slash karakteriyle yapılan tek satırlık yorumlar (//) eklenen özellikler arasındaydı. Dahası, Stroustrup, C++ için yeni bir derleyici olan 'u geliştirdi.

1984'te, Stroustrup ilk giriş/çıkış kütüphanesini gerçekledi. Bir isimli fonksiyon yerine çıkış operatörünün (<<) sağlanması fikri [ ] tarafından önerilmiştir (McIlroy öncesinde öneren kişidir).

1985'te 'in ilk baskısı yapılmış ve henüz resmi bir standard olmadığından bu kitap bir kesin referans olarak kabul edilmiştir. C++'ın ilk ticari gerçeklenimi aynı yılın ekim ayında yayınlanmıştır.

1989'da C++ 2.0 yayınlandı ve 1991'de The C++ Programming Language kitabının güncellenmiş ikinci baskısı yapıldı. C++ 2.0 ile çoklu kalıtım, soyut sınıflar, statik üye fonksiyon, const üye fonksiyonlar ve protected üyeler eklenmiştir. 1990'da The Annotated C++ Reference Manual yayınlandı. Bu kitap, gelecekte yayınlanacak olan resmi standard için bir taban teşkil etmiştir. Sonrasında eklenen özellikler, template, sıradışı durum yönetimi, isim alanları, yeni isimli castlar (tür dönüştürme) ve bool veri türüdür.

1998'de C++98 yayınlandı ve dilin standardlaştırılması başladı. 2003'te küçük bir güncelleme olan yayınlandı.

C++98 sonrasında C++'ın evrimi 2011'e kadar görece yavaş ilerlemiştir. 2011'de yayınlandı. C++11 ile standard kütüphane genişlemiş ve C++ programcılarının faydalanacağı pek çok özellik eklenmiştir. Bir başka küçük güncelleme olan Aralık 2014'te yayınlandı. daha büyük bir güncellemedir ve Aralık 2017'de yayınlanmıştır. Şubat 2020'de tasarısı sonlandırılan C++20 standardı 4 Eylül 2020 onaylanmış ve resmi olarak 15 Aralık 2020 basılmıştır.

Stroustrup, 3 Ocak 2018'de "C++ programlama dilini kavramsallaştırması ve geliştirmesi" nedeniyle mühendislik ödülünün 2018 yılı kazananı olarak duyurulmuştur.

(Aralık 2022 itibarıyla) C++ 'te 'yı TIOBE sıralamasındaki tarihinde ilk kez geride bırakmış ve programlama dillerinin ardından üçüncü sırada listelenmiştir.

Etimoloji​

Stroustrup'a göre, "isim C dilinden yapılan değişimlerin evrimsel doğasını vurguluyor." İsimlendirme Rick Mascitti tarafından (1983'ün ortalarında) yapılmıştır ve ilk defa Aralık 1983'te kullanılmıştır. Mascitti'ye bununla ilgili soru yöneltiğinde (1992'de), mizah amaçlı bu ismin verildiğini belirtmiştir. İsimlendirme C'nin ++ operatöründen (eklendiği değerini artırır) gelir ve "+" geliştirilmiş bilgisayar programlarını ifade etmede kullanılan yaygın bir isimlendirme geleneğidir.

C++'ın geliştirilmesi sürecinde, dil son adını almadan evvel, "new C" ve "C with Classes" diye anıldığı da olmuştur.

Felsefe​

C++'ın yaşamı boyunca geliştirilmesi ve evrimi bir dizi ilkeye dayandırılmıştır:

  • Gerçek sorunlara göre yönlendirilmeli ve özellikleri gerçek programlarda hemen faydalı olmalıdır.
  • Her özellik (makul derecede açık bir yöntemle) gerçeklenebilir olmalıdır.
  • Programcılar kendi programlama stillerini seçme özgürlüğüne sahip olmalıdır ve bu stil C++ tarafından tam olarak desteklenmelidir.
  • Faydalı olacak bir özelliğe izin vermek, C++'ın her türlü yanlış kullanımını engellemekten daha önemlidir.
  • Programları, ayrı, iyi tanımlanmış parçalar şeklinde organize edilmesini sağlayacak imkanlar sunmalı ve bu ayrı geliştirilen parçaların birleştirilmesini mümkün kılmalıdır.
  • örtük (implicit) ihlallerine izin verilmemelidir (ancak programcı tarafından kasıtlı (explicit) olarak talep edilen ihlallere izin verilir).
  • Kullanıcı tarafından oluşturulan türler, yerleşik türlerle aynı destek ve performansa sahip olmalıdır.
  • Kullanılmayan özellikler, oluşturulan olumsuz etkilememelidir (örneğin daha düşük performansa neden olmamalıdır).
  • C++'ın altında bir başka dil olmamalıdır ( haricinde).
  • C++, kendi ayrı ve uyumsuz teşvik etmek yerine, mevcut diğer uyumlu çalışabilmelidir.
  • Programcının niyeti bilinmiyorsa, programcıya manuel kontrol sağlayarak bunu belirtme imkanı verilmelidir.

Standardizasyon​

Ana maddeler: , , , , , ve
Bir programlama dilini oluşturan gramer, anlam ve yapıları muğlak olmayacak bir biçimde belgelenir (spec veya specification) ve yayınlanır. sağlayıcıları bu belgeyi kullanarak dili gerçekleyen derleyiciyi oluşturur.

C++ dilinin özelliklerini belirleyen bu belge (buradan sonrasında, standard) / Ortak Teknik Komitesi 1 (İng: Joint Technical Committee 1, JTC1) / Altkomite 22 (Subcommittee 22, SC22) Çalışma Grubu 21 (Working Group 21, WG21) (ISO/IEC JTC1/SC22/WG21) tarafından geliştirilir.

İlk standard 1998'de ISO/IEC 14882:1998 adıyla yayınlandı. Sonrasında C++03, C++11, C++14, , ve mevcut standard olan yayınlandı. 2012 sonrası üçer senelik periyotlarla yayınlanmaya başlanmıştır.

Dil​

C++ dili iki temel bileşenden oluşur: C'den devraldığı yapılarla donanım özellikleriyle doğrudan eşleşme ve bu eşleşmeler üzerine kurulmuş maliyetsiz soyutlamalar (zero-overhead abstractions). Stroustrup C++'ı şu şekilde açıklamıştır: "etkili kullanım ve elegan soyutlamalar için [tasarlanmış] bir hafif soyutlama programlama dili" ve "hem donanım erişimi ve hem de soyutlama desteği C++'ın temelidir. Onu diğer dillerden ayıran, bunu etkili bir biçimde yapmasıdır."

Nesne saklama​

C++, 'de olduğu gibi, dört farklı sahiptir: otomatik saklama süresince barındırılan nesneler, statik saklama süresince barındırılan nesneler, dinamik saklama süresince barındıran nesneler ve thread'te saklama süresince barındırılan nesneler.

Otomatik saklama süresince barındırılan nesneler​

Bir fonksiyon veya kapsamda (scope) tanımlanan nesneler bir veri yapısında tutulur. Buna göre, bir kapsama girildiğinde ({) nesnelerin tanımlanma sırasına göre yapıcı üye fonksiyon (constructor) çağrılır, kapsam terk edildiğinde (}) nesne yaşam süresinin sonuna gelinir ve tanımlanma sırasının tersi yönünde yok edici üye fonksiyon (destructor) çağrılır (RAII). En son tanımlanan en önce yok edilir (son giren ilk çıkar).

Statik saklama süresince barındırılan nesneler​

Statik saklama sürecine sahip nesneler kapsamdan bağımsız olarak program süresince saklanır ve main() fonksiyonu çağrılmadan oluşturulup, main() bitiminden sonra tanımlanma sırasının tersi yönünde yok edilir.

Dinamik saklama süresince barındırılan nesneler​

Dinamik saklama sürecine sahip nesneler new çağrısıyla oluşturulur ve delete çağrısıyla yok edilir. new çağrısı tahsis edilmiş bellek alanı döndürür. , new ve delete yerine, tekil kaynak sahipliği için make_unique<T>, paylaşılmış kaynak sahipliği için make_shared<T> çağrılarıyla oluşturabilecek zeki işaretçilerin (smart pointer) kullanılmasını tavsiye eder.

Thread saklama süresince barındırılan nesneler​

saklama sürecine sahip nesneler thread_local anahtar sözcüğüyle oluşturulur ve statik saklama sürecine oldukça benzer. Temel fark, nesnelerin oluşturulması thread oluşturulmasından öncedir ve yok edilmesi thread çalışmasının bitimiyle (join) olur.

Template​

Template ( : şablon) yapısı türden bağımsız parameterize değişken, fonksiyon veya sınıf yazılmasına izin verir ve jenerik programlamayı, parametrik türün oluşturulmasından önce (type instantiation) tür manipulasyonuna izin veren ve kod optimizasyonunu mümkün kılar. Template mekanizması Turing-tam'dır, böylece herhangi bir hesaplamanın bir şekilde derleme zamanında programlanarak ifade edilebilmesini sağlar. Template'e geçilen parametre bir tür (type) ve türün nesnesi (non-type) olabilir.
 

M5

Revaha ÇELİK
Kayıtlı Kullanıcı
Katılım
10 Ağustos 2025
Mesajlar
174
Puanı
18
Yaş
38
Konum
06 - Ankara
Web
www.sohbetly.org
Eğitim
Beykent Universitesi Mimarlık Fakültesi
İlgi Alanı
ArabaSürmek,
Cinsiyet
Erkek
Takım
CNBHo3
Medeni
Bekar

Nesne​

C++, tanımlamada RAII (Resource Acquisition Is Initialization) tekniğini kullanır. Nesne için gerekli olan kaynak ayrımı (Resource Acquisition), tanımlandığı anda yapılır (Initialization) ve gerektiğinde deterministik olarak serbest bırakılır. Böylece kaynaklar init()/destroy(), allocate()/free(), open()/close() gibi fonksiyon çiftleriyle manuel olarak yönetilmek zorunda kalmaz.

Kapsülleme​

(encapsulation), veri yapısının geliştirici tarafından doğru bir şekilde kullanılacağından emin olmak için nesneye ait bilgilerin bir kısmını erişilemez yapmaktır. C++, sınıf yapısında üyelerin public, protected veya private tanımlanmasına izin verir. private üyeler yalnızca sınıfın üyeleri tarafından erişilebilir, böylece sınıfın kendisini ilgilendiren bazı üye değişken veya fonksiyonlar kullanıcıdan (client) saklanır. Ayrıca bu yolla nesnenin yaşamı süresince değişmemesi gereken durumlar (class invariant) korunabilir.

Kalıtlama​

(inheritence) var olan bir türün özelliklerini taşıyan yeni bir tür oluşturmayı sağlar. Temel sınıftan kalıtım, "public", "protected" veya "private" olarak ilan edilebilir. Diğer iki kalıtım türü anlaşılmasını zorlaştırdığından çoğu zaman yalnızca public kalıtım kullanılır. Geçiş belirteci belirtilmezse, class private, struct public olarak kalıtılır.

Temel sınıftan kalıtım sanal (virtual) olarak ilan edilebilir, buna sanal kalıtım (virtual inheritence) denir. Sanal kalıtım çoklu kalıtımın problemlerinden sıyrılarak temel sınıfın yalnızca bir örneğinin kalıtım grafiğinde olmasını sağlar.

İşleçlerin ve işlevlerin fazladan yüklenmesi​

C++ dilinde işleçlerin (operator) çoğu fazladan yükleme yoluyla genelleştirilebilir. Örneğin + işleci sayılar için anlamlıyken, std::string sınıfı için de fazladan yüklenmiş, böylece türün temsil ettiği veriye + işleciyle birleştirilme yeteneği kazandırılmıştır. Benzer şekilde iki std::string sınıfı nesnesinin eşitliği == işleciyle kontrol edilebilir. Kullanıcı tanımlı herhangi bir tür ( ), işleçleri fazladan yükleyebilir.

Aynı isme sahip işlevler (function) farklı tür veya sayıda parametre alarak fazladan yüklenebilir. Örneğin fonksiyonu int, float ve double türleri için fazladan yüklenmiştir.

Çokbiçimlilik​

(polymorphism) kullanılarak farklı türler aynı arayüz üzerinden erişilebilir. Çokbiçimli bir tür kendisini oluşturan diğer türler gibi davranabilir. C++, dinamik (çalışma zamanında) ve statik (derleme zamanında) çokbiçimlilik çeşitlerine izin verir.

Dinamik çokbiçimlilik​

Kalıtlama kullanılarak​

Üst sınıfa işaret eden bir pointer veya ona ait bir referans, alt sınıfları da gösterebilir. Bu durumda üst sınıf bir çokbiçimli türdür (polymorphic type). Eğer üst sınıf bir fonksiyona referans veya pointer şeklinde parametre olarak geçilirse, ondan türetilmiş sınıflar da geçilebilir. Üst sınıf üzerinden alt sınıfların üyeleri kullanılabilir. Alt sınıflardan hangisinin geçildiği dynamic_cast kullanılarak belirlenebilir.

Sanal üye fonksiyonlar kullanarak​

Türetilmiş sınıf, üst sınıfta sanal (virtual) olarak işaretlenmiş bir üye fonksiyonun içeriğini değiştirerek tekrar gerçekleyebilir (override). Bu durumda çokbiçimli tür, tekrar gerçeklenen üye fonksiyonu çağıracaktır.

Statik çokbiçimlilik​

Template yapısı farklı türler için parçalı veya tam özelleştirilerek parametrik çokbiçimlilik sağlanabilir.

İşlevlerin fazladan yüklenmesi de statik çokbiçimlilik olarak düşünülebilir. Aynı isme sahip fonksiyonlar, parametre türü veya sayısına göre farklı fonksiyonları çağırır.

Lambda ifadeleri​

C++ ifadeleriyle anonim fonksiyon yazımını destekler.

[kapma](parametreler) -> dönüş_tipi { fonksiyon_gövdesi };
dönüş_tipi düşürülebilir, bu durumda dönüş tipi gövdeden çıkarımsanır:

[kapma](parametreler) { fonksiyon_gövdesi };
Lambda parametre almıyorsa, () yapısı düşürülebilir:

[kapma]{ fonksiyon_gövdesi };
Lambda değişkene atanarak isim alabilir ve tekrar kullanılabilir:

auto func = [kapma](parametreler) { fonksiyon_gövdesi };
func(argumanlar);
func(argumanlar);
Lambda tanımlandığı anda çalıştırılıp hesaplama sonucuna erişilebilir:

auto result = [kapma](parametreler) { fonksiyon_gövdesi }(argumanlar);
C++20 ile template lambda ifadeleri yazılabilir:

[kapma] <template_parametreler> (parametreler) -> dönüş_tipi { fonksiyon_gövdesi }

Sıradışı durum yönetimi​

Program çalışırken yolunda gitmeyen bir şey oluştuğunda ve programın aniden sonlandırılması arzu edilmiyorsa, (exception handling) kullanılarak ana koddan ayrı olarak yönetim sağlanabilir. Sıradışı durum (exception) oluştuğu yerde bir hata kodu fırlatır ve sıradışı durum yöneticisi (exception handler) tarafından yakalanana kadar kapsam dışana taşar. Eğer hata kodu yakalanmazsa program sonlandırılır.

Standard Kütüphane​

Ana madde:
C ve C++'da bir "Merhaba Dünya" programı.
C++ standard kütüphanesi, pek çok tutucu tür, , , , , , , metaprogramlama araçları, , zaman yönetimi, sıradışı durum yönetimi, çeşitli matematik fonksiyonları, , ile başlık dosyaları bulundurur.

C++ Core Guidelines​

C++ Core Guidelines (Türkçe, C++ Temel Yönelgeleri), C++ programcılarının daha basit, daha etkili, daha yönetilebilir kod yazmalarını sağlamayı hedefleyen yönelgeleri içeren bir projedir. Projenin editörlüğünü dilin yaratıcısı Bjarne Stroustrup ile ISO C++ Çalışma Grubu başkanı Herb Sutter sürdürür.

Core guidelines pek çok stil, iyi uygulama ve modern C++ tavsiyeleri bulundurur. Statik analiz araçları bu tavsiyeleri gerçekleyerek kod yazılırken programcıları kötü uygulamalardan kaçınmasına yardımcı olur.

Guideline Support Library (GSL), Core Guidelines'ta tavsiye edilen pek çok tür ve fonksiyonu barındıran bir kütüphanedir.

Derleme modeli​

C++ çoğunlukla derlenen bir dil olarak gerçeklenmiştir. derlenme süreci dört aşamadan oluşur, sırasıyla; önişleme, derleme, assembly ve bağlama. Derleyici kaynak koda uygulandığında bu aşamalar birbiri ardına gerçekleşir.

  • (preprocessor) #include direktifiyle eklenen dosyaları koda taşır. Ayrıca kodda sözcük değişiklikleri yapabilir, koşullu derleme sağlayabilir, derleyicinin bir takım özelliklerini kontrol edebilir veya kodun derleneceği platform hakkında bilgi alabilir.
  • (compiler veya compiler proper) kodu , , ve anlamı analiz eder, hataları bildirir, eder ve sahip olduğu assembly koduna derler.
  • kodu assembler tarafından yerdeğiştirebilir (relocatable object code) dönüştürülür.
  • (linker) yerdeğiştirebilir hedef kodunu diğer hedef kodlarına (geliştirilen veya önceden derlenmiş sistem vd.) bağlar ve hedef kodunu oluşturur.
 

M5

Revaha ÇELİK
Kayıtlı Kullanıcı
Katılım
10 Ağustos 2025
Mesajlar
174
Puanı
18
Yaş
38
Konum
06 - Ankara
Web
www.sohbetly.org
Eğitim
Beykent Universitesi Mimarlık Fakültesi
İlgi Alanı
ArabaSürmek,
Cinsiyet
Erkek
Takım
CNBHo3
Medeni
Bekar

Örnekler​

Değişkenler​

Değişkenlerin bir programda çalıştırmak için değişkenlerin veri türünü belirtmek gereklidir (örneğin, int, char, double, bool, std::string) ancak C++11'de auto anahtar kelimesi eklendiği için değişkenin veri türünü belirtmek gerek yoktur.

#include <iostream>
#include <string>

int main(){
// Değişkenleri oluşturmak
int integer = 32;
double doubleNum = 4.2;
bool want = true;
std::string myString = "Merhaba, dünya!";
char myChar = 'Z';
auto autoVar = 43; // Otomatik değişken türünü algılamak

// Değişkenler yazdırmak
std::cout << "Integer: " << integer << std::endl;
std::cout << "Boolean: " << want << std::endl;
std::cout << "Double: " << doubleNum << std::endl;
std::cout << "String: " << myString << std::endl;
std::cout << "Character: " << myChar << std::endl;
std::cout << "Auto Variable: " << autoVar << std::endl;

return 0;
}

Yorum Satırları​

Yorum satırları derleyici tarafından çalıştırılmaz. Bunlar kodun anlaşılmasını kolaylaştırmak için eklenir.

// Tek satirdan olusan bir yorum
/*
Birden
fazla
satirdan olusan yorum
*/

Merhaba Dünya​


Bu program ekranına "Merhaba, dunya!" yazacaktır.

#include <iostream>

int main() {
std::cout << "Merhaba, dunya!\n";
}

İşleçlerinin fazladan yüklenmesi​

#include <iostream>

struct Complex {
double real{};
double imaginary{};

Complex& operator+=(const Complex& other) {
real += other.real, imaginary += other.imaginary;
return *this;
}

Complex& operator-=(const Complex& other) {
real -= other.real, imaginary -= other.imaginary;
return *this;
}

friend std::istream& operator>>(std::istream& is, Complex& c) {
return is >> c.real >> c.imaginary;
}

friend std::eek:stream& operator<<(std::eek:stream& os, const Complex& c) {
return os << c.real << '+' << c.imaginary << 'i' << '\n';
}
};

Complex operator+(const Complex& l, const Complex& r) {
return Complex{l.real + r.real, l.imaginary + r.imaginary};
}

Complex operator-(const Complex& l, const Complex& r) {
return Complex{l.real - r.real, l.imaginary - r.imaginary};
}

int main() {
Complex c;
std::cout << c; // 0+0i

Complex first{1, 0};
std::cout << first; // 1+0i

Complex second{0, 1};
std::cout << second; // 0+1i

first += second;
std::cout << first; // 1+1i

Complex result = first + second;
std::cout << result; // 1+2i
}

Lambda ifadeleri​

#include <vector>
#include <iostream>
#include <range/v3/all.hpp>

int main() {
using namespace ranges;
// .-- boş kapma
auto // | .-- parametre
harmonic_sum = views::iota(1)// v v v-- dönüş tipi
| views::transform([](int n) -> double { return 1.0 / n; })
| views::partial_sum // lambda gövdesi-^-----------------^
| views::take(10)
| to<std::vector<double>>;

for(auto [n, hn] : harmonic_sum | views::enumerate)
std::cout << n << ' ' << hn << '\n';
}

// 0 1
// 1 1.5
// 2 1.83333
// 3 2.08333
// ...

Sıradışı durum yönetimi​

#include <exception>
#include <filesystem>
#include <cstdio>

// kullanicilar std::exception'i kalitlayarak
// kendi siradisi durum tipini tanimlar
struct appUsageError : std::exception {
[[nodiscard]] const char *what() const noexcept override {
return "Usage: mkdir directory";
}
};

int main(int argc, const char *const argv[]) {
try {
if (argc != 2)
throw appUsageError{};

// noexcept degil, filesystem_error hatasi firlatabilir
//
std::filesystem::create_directory(argv[1]);

} catch (const appUsageError &e) {
puts(e.what());
} catch (const std::filesystem::filesystem_error &e) {
puts(e.what());
} catch (const std::exception &e) {
puts(e.what());
}
}
// c++ -std=c++17 main.cpp -o mkdir
// ./mkdir
// Usage: mkdir directory
// ./mkdir /usr/local/Folder
// filesystem error: cannot create directory: Permission denied [/usr/local/Folder]
// ./mkdir Folder
// # Folder adinda bir dizin hatasiz olusturuldu
 

M5

Revaha ÇELİK
Kayıtlı Kullanıcı
Katılım
10 Ağustos 2025
Mesajlar
174
Puanı
18
Yaş
38
Konum
06 - Ankara
Web
www.sohbetly.org
Eğitim
Beykent Universitesi Mimarlık Fakültesi
İlgi Alanı
ArabaSürmek,
Cinsiyet
Erkek
Takım
CNBHo3
Medeni
Bekar

Kaynakça​

  1. . ISO. 15 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  2. . ISO. 13 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  3. . ISO. 30 Ocak 2017 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  4. . ISO. 29 Nisan 2016 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  5. . ISO. 29 Ocak 2013 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  6. . ISO. 16 Aralık 2020 tarihinde kaynağından . Erişim tarihi: 10 Şubat 2024.
  7. . ISO. 6 Ekim 2021 tarihinde kaynağından . Erişim tarihi: 22 Ekim 2024.
  8. (İngilizce). 28 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 22 Şubat 2024.
  9. . isocpp.org. 15 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 15 Şubat 2024.
  10. Stroustrup, Bjarne (29 Mart 1994). . Addison-Wesley Professional. s. 101. . 4 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 28 Şubat 2024.
  11. ^ Stroustrup, Bjarne (7 Mart 2010). . stroustrup.com. 6 Şubat 2016 tarihinde kaynağından . Erişim tarihi: 16 Eylül 2010.
  12. Stroustrup, Bjarne. (PDF). 20 Kasım 2007 tarihinde kaynağından (PDF). Erişim tarihi: 14 Ağustos 2013.
  13. ^ Stroustrup, Bjarne. (PDF). 2 Şubat 2019 tarihinde kaynağından (PDF).
  14. Stroustrup, Bjarne (1996). "A history of C++: 1979-1991". History of programming languages—II. . ss. 699-769. :
    Özgürce erişilebilir
    .
  15. Stroustrup, Bjarne. . First. 9 Ağustos 2012 tarihinde kaynağından . Erişim tarihi: 16 Eylül 2010.
  16. Stroustrup, Bjarne. . Second. 9 Ağustos 2012 tarihinde kaynağından . Erişim tarihi: 16 Eylül 2010.
  17. Sutter, Herb (30 Haziran 2016). . herbsutter.com. 8 Ekim 2016 tarihinde arşivlendi. the next standard after C++17 will be C++20
  18. Dusíková, Hana (6 Kasım 2019). (PDF). 29 Aralık 2019 tarihinde kaynağından (PDF). Erişim tarihi: 13 Şubat 2020.
  19. . isocpp.org. 8 Eylül 2020 tarihinde kaynağından . Erişim tarihi: 7 Eylül 2020.
  20. . isocpp.org. 11 Eylül 2020 tarihinde kaynağından . Erişim tarihi: 8 Eylül 2020.
  21. (Basın açıklaması). National Academy of Engineering. 3 Ocak 2018. 3 Ocak 2018 tarihinde arşivlendi. Erişim tarihi: 14 Aralık 2021.
  22. TIOBE (January 2022). . TIOBE.com. TIOBE Company. 25 Şubat 2018 tarihinde kaynağından . Erişim tarihi: 2 Şubat 2022.
  23. . 6 Şubat 2016 tarihinde kaynağından . Erişim tarihi: 16 Ocak 2008.
  24. . . 17 Kasım 2010 tarihinde arşivlendi. Erişim tarihi: 7 Eylül 2015.
  25. . 27 Şubat 2024 tarihinde arşivlendi. Erişim tarihi: 27 Şubat 2024.
  26. Stroustrup, B. (6 Mayıs 2014). . YouTube. 28 Nisan 2015 tarihinde kaynağından . Erişim tarihi: 12 Haziran 2015.
  27. B. Stroustrup (interviewed by Sergio De Simone) (30 Nisan 2015). . 8 Temmuz 2015 tarihinde kaynağından . Erişim tarihi: 8 Temmuz 2015.
  28. / . 2 Ekim 2018 tarihinde sitesinde . §3.7 Storage duration [basic.stc]
  29. . 24 Mayıs 2022 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.
  30. (İngilizce). 21 Mart 2024 tarihinde arşivlendi. Erişim tarihi: 21 Mart 2024.
  31. TylerMSFT (16 Haziran 2023). . learn.microsoft.com. 25 Ağustos 2023 tarihinde arşivlendi. Erişim tarihi: 25 Ağustos 2023.
  32. . 21 Ocak 2024 tarihinde kaynağından . Erişim tarihi: 29 Ocak 2024.
  33. . 3 Aralık 2023 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.
  34. (İngilizce). 29 Şubat 2024. 29 Şubat 2024 tarihinde kaynağından .
  35. (İngilizce). 29 Şubat 2024. 29 Şubat 2024 tarihinde kaynağından .
  36. . 10 Şubat 2024 tarihinde kaynağından . Erişim tarihi: 9 Şubat 2024.
  37. TylerMSFT (16 Haziran 2023). . learn.microsoft.com. 25 Ağustos 2023 tarihinde arşivlendi. Erişim tarihi: 25 Ağustos 2023.
  38. . 28 Kasım 2023 tarihinde kaynağından . Erişim tarihi: 30 Ocak 2024.

Dış bağlantılar​


bu konu hakkında daha fazla bilgi var:

 

Forumdan daha fazla yararlanmak için, "Giriş Yap" veya "Kayıt Ol"

Forumun.NET - Hakkında!

Forumun.NET Tamamen Ücretsiz ve "Karşılıksız" Hizmet Vermektedir.
"Resmi Kurum" ve Markalar ile Resmi Hiç Bir Bağımız Yoktur.!

Forumun.NET - Bilgilendirme!

Forum'da, Paylaşılan Mesajlar, Konular, ve Resimler'den Doğabilecek,
Tüm Yasal Sorumluluk'lar Paylaşan Kişiye Aittir.!

Üst