C++ 14

C++ 11 ile birlikte Modern C++ olarak adlandırılan C++ diline C++ 14 ile eklenen yeni özelliklerle ilgili bilgiler örneklerle yer alıyor.

C++ 14 nedir?

C++ 11 ile birlikte C++ Modern C++ olarak adlandırılmakta ve modern programlama dillerinde yer alan bir çok özelliği C++ ile kullanmamıza imkan vermektedir.

C++ 11 ile birlikte C++ artık sürekli olarak güncelllenen bir dil haline geldi.

C++ 14 ise C++ 11 ile birlikte gelen özelliklerin eksiklerin giderildiği ve yeni özelliklerin eklendiği bir C++ sürümüdür.

C++ 14 ile gelen yeni özelliklere bakmadan önce C++ 11 yazıma bakmanızda fayda var.

Nasıl çalıştırılır?

C++ 14 ile gelen özellikler bir çok derleyici tarafından kullanıma hazır hale getirilmiştir.

C++ 14 özelliklerinin kullanmak için derleyici parametresine (flags) -std=c++1y veya -std=c++14 eklemek yeterli olacaktır.

Ayrıca cpp.sh gibi çevrimiçi derleyicilerde kullanılabilir.

1. Binary Literals

C++ ile ikilik tabanda sayıların gösterimi daha kolay hale gelmiştir.

#include<iostream>

using namespace std;

int main(){

    int sayi1 = 1453;
    int sayi2 = 0x5AD;
    int sayi3 = 0b0000010110101101;

    cout << sayi1 << endl;
    cout << sayi2 << endl;
    cout << sayi3 << endl;

    return 0;
}

Sistem seviyesindeki işlemler yaparken binary literals kolaylık sağlayacaktır.

2. Digit Seperator

Sayıları (int, double, float) tek tırnak işareti (‘) ile parçalara bölmeyi sağlar.

#include<iostream>

using namespace std;

int main(){

    int sayi1 = 10000000;

    cout << sayi1 << endl;

    int sayi2 = 1'000'0000;

    cout << sayi2 << endl;

    return 0;
}

Bu özellik yazılan uzun sayıların okunurluğunu arttıracaktır.

3. Return type deduction

C++ 11 ile birlikte gelen auto anahtar kelimesinin kullanım alanı genişletildi.

#include<iostream>

using namespace std;

auto kup(int x){
    return x * x * x;
}

int main(){

    cout << kup(3) << endl;

    return 0;
}

C++ 14 ile birlikte auto anahtar kelimesi fonksiyon sonucuna göre tür belirleme için kullanılabilecek.

4. decltype(auto)

C++ 11 ile birlikte gelen decltype anahtar kelimesinin kulllanım alanı genişletildi.

#include<iostream>

using namespace std;

decltype(auto) kup(int x){
    return x * x * x;
}

string adi = "Yusuf SEZER";

decltype(auto) fonk1(){ return adi;}  // dönüş türü: string
decltype(auto) fonk2(){ return (adi);}  // dönüş türü: string &

int main(){

    cout << kup(3) << endl;

    return 0;
}

C++ ile gelen decltype anahar kelimesinin auto anahar kelimesinden ayıran en önemli özellik referans türünden değerleri de tanımlıyor olabilmesidir.

5. Generalized lambda captures & Generic lambdas

C++ 11 ile birlikte gelen lambda fonksiyonları veya anonim fonksiyonların kullanımı daha da esnek hale getirilmiştir.

#include<iostream>

using namespace std;

int main(){

    auto kup  = [](auto sayi){ return sayi * sayi * sayi; };
    cout << kup(3) << endl;

    auto sayi = 0;
    auto kare = [sayi = 5](){  return sayi * sayi; };

    cout << kare() << endl;

    return 0;
}

Lambda fonksiyonlarının esnek hale gelmesi daha etkili fonksiyonların yazılmasını kolaylaştırmıştır.

6. Variable templates

C++ 14 ile birlikte artık sabit ifadeler için şablon hazırlama imkanı getirildi.

#include<iostream>

using namespace std;

template<class T>
constexpr T pi = T(3.1415926535897932385);
template<class T>
constexpr T e  = T(2.7182818284590452353);

int main(){

    cout << pi<int> << endl;
    cout << pi<double> << endl;
    cout << e<int> << endl;
    cout << e<double> << endl;

    return 0;
}

Sabit ifadeler için şablon ifadesinin getirilmesi tür dönüşüm işlemini daha kolay hale getirmiştir.

7. constexpr

C++ 11 ile birlikte gelen constexpr anahtar kelimesinin kullanım alanı daha da genişletildi.

#include<iostream>

using namespace std;

constexpr int factorial(int n) {
  if (n <= 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

int main(){

    cout << factorial(5);

    return 0;
}

C++ 11 ile gelen constexpr anahtar kelimesi derleme zamanında işlem yaptığından daha hızlı çalışır.

8. deprecated

C++ 14 ile birlikte gelen güzel bir özellik ise kullanımdan kaldırılan sınıf veya fonksiyonları belirtmek için kullanılan [[deprecated]] anahtar kelimesidir.

#include<iostream>

using namespace std;

class [[deprecated]] EskiBirSinif{ };

[[deprecated("Bu fonksiyon artık kullanılmıyor.")]]
void EskiBirFonksiyon(){ printf("Yusuf SEZER"); }

int main(){

    EskiBirSinif *pEskiBirSinif = new EskiBirSinif();
    delete pEskiBirSinif;

    EskiBirFonksiyon();

    return 0;
}

Derleyiciye [[deprecated]] ile sınıf veya fonksiyonun kullanımdan kaldırıldığını bildirip uyarı mesajı verebiliriz.

9. Öntanımlı sabitler

C++ 11 ile birlikte gelen kullanıcı tanımlı sabitler özelliği C++ 14 ile birlikte çeşitli sınıflara eklenmiş olarak gelmektedir.

#include<iostream>
#include<chrono>

using namespace std;
//using namespace std::chrono_literals;

int main(){

    auto day = 24h;
    day.count(); // == 24
    chrono::duration_cast<chrono::minutes>(day).count(); // == 1440

    return 0;
}

Örnekte görüldüğü üzere C++ 11 ile birlikte gelen ve tarih saat işlemleri için kullanılan chrono sınıfındaki h sabiti kullanılmıştır.

C++ 14 ile birlikte chrono sınıfına benzer şekilde diğer sınıflara da çeşitli özellikler eklenerek dilin daha esnek olması sağlanmıştır.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!