Literaller Sabitleri: Literaller kodda direkt olarak yazılan ifadelerdir. Sabitlerdir çünkü değerleri değiştirilemez.
Örneğin
Kod:
bool AmIAlive = true; // true bir literaldir ve değeri değiştirilemez.
int yas = 20; // 20 bir int literaldir ve degistirilemez.
char *isim = "Alperen"; // Alperen bir string sabitidir.
char A = 'A' // Char literal
double PI = 3.14159 // 3.14159 bir double literaldir.
double avogadro = 6.02e23;
Sayısal sabitler bazı eklere sahip olabilirler. Bu ekler o sabitin türünü belirler. İsteğe bağlıdırlar. Derleyici genellikle hangi sabiti kullanmak istediğinizi anlayabilir.
Data Type | Suffix | Meaning |
int | u or U | unsigned int |
int | l or L | long |
int | ul, uL, Ul, UL, lu, lU, Lu, or LU | unsigned long |
int | ll or LL | long long |
int | ull, uLL, Ull, ULL, llu, llU, LLu, or LLU | unsigned long long |
double | f or F | float |
double | l or L | long double |
İkilik, sekizlik ve on altılık sayı sabitleri
İkilik sayı sabitlerinin başına “0b”, sekizliklerin başına “0” ve on altılıkların başına “0x” koyulur.
Kod:
int y = 0b01011001;
int x = 0765;
int f = 0xFF;
Sembolik sabitler
Normal değişkenlerin değerleri değiştirilebilirdir. Const değişkenler ise değiştirilemezler. Örneğin pi sayısı, dünyanın çekim ivmesi gibi değerlerin değişmediğini biliriz. Yazdığımız kodda da değişmemesi gerekmektedir. Bunun için değişken tanımının başına “const” ifadesini koyarız.Const değerlere ilk değer ataması yapmak zorunludur.
Örneğin:
Kod:
const double gravity { 9.8 }; // Dogrudur ve tercih edilir.
double const PI { 3.14 }; // Calisir ama onerilmez.
const int X; //Derleyici hatasi.
Const değişkenlere ilk değer atması olarak başka bir değişkenin değeri atanabilir. Örneğin:
Kod:
std::cout << Yasiniz?;
int yas;
std::cin >> yas;
const int Kullanicininyasi(yas);
Constexpr
Constexpr değişkenler const değişkenler gibi sabitlerdir ama constexpr değişkenler derleme zamanı çözülmelidirler.örneğin:
Kod:
constexpr pi(3.14); /* Derleyici derleme sirasinda pi'ye atanacak degeri cözebildi. Sikinti yok */
int x;
std::cin >> x;
constexpr int foo(x) /* Derleme hatasi. Derleme sirasinda atanacak deger bilinmiyor. */
Önişlemci Kullanarak sabit tanımlama
C de çok kullanılan önişlemci sabitleri C++ da yazarken çok önerilmez. Çünkü dilin mekaniklerine aykırı bir kullanımı vardır ve yer yer ikiliklere sebep olabilir.
Kod:
#define SABIT 100
int x = SABIT;
Tür dönüşümleri
Bir veri tipinin başka bir veri tipine çevrilmesidir. Bazı tip dönüşümleri veri kaybına sebep olurken bazılarını da yapmak mümkün değildir. C++ üstü kapalı (implicit) birçok dönüşümü otomatik olarak yapabilir. Örneğin, aşağıda int bir veri long bir veriye dönüştürülmüş.
Kod:
int myInt{12};
long myLong;
myLong = myInt;
Bu durumda veri, daha büyük bir veri tipine dönüştürüldüğü için veri kaybı olmadı. Ama aşağıdaki durumlarda böyle bir durum söz konusu.
Dönüşüm | Olası riskler |
Büyük kayan noktalı sayıyı, küçük kayan noktalı sayıya | Hassaslık kaybı ya da sınırların dışına taşma |
Kayan noktalı sayıdan tam sayıya | Kesirli kısmın kaybı ya da sınırların dışına taşma |
Büyük tam sayıdan küçük tam sayıya | Sınırların dışına taşabilir |
Açık (explicit) tip dönüşümleri
C++ da beş farklı tip dönüşümü vardır. C-stili, static, dynamic, const ve reinterperet dönüşümler. Burada C-stili dönüşüm ve statik dönüşümler anlatılacak.C stili dönüşüm
Bu dönüşümde parantez operatörü kullanılır. Parantezin içine yazılan tip dönüştürülecek tip olur. Örneğin:
Kod:
int i1 = 10;
int i2 = 4;
float f = (float)i1 / i2;
Aynı zamanda bu şekilde de yapılabilir. (Daha çok fonksiyona benzeyen bir şekilde)
Kod:
int i1 = 10;
int i2 = 4;
float f = float(i1) / i2;
static_cast
Kod:
char c = 'a';
std::cout << static_cast<int>(c) << std::endl; // a değil 97 yazdırır.
Statik dönüşümün en iyi yanı, derleme zamanı kontrol yapmasıdır. Böylece mantıksız olabilecek işlemlerden kaçınılır.