C++ 14

Paylaş

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 Separator

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.


Bunlarda ilgini çekebilir


LinkedIn grubuna buradan katılın.