Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

[c/c++]const niye kullanmalıyım ?


Öne çıkan mesajlar

Mesaj tarihi:
bazı projelerde görüyorum ama anlam veremiyorum. constu neden kullanmam gerekiyor ? değiştirilemez değer falan bunları anladım da zaten const olarak tanımlayacağım şeyi ben normal tanımlayıp program boyunca hiç değiştirmesem de aynı şeye denk gelmez mi ? aynı şekilde classlardaki fonksiyonların sonunda const; koyulunca da memberlara erişimi olmuyor, daha doğrusu member ile ilgili "return"dan başka işlem yapmıyor. niye const? ayrıntılı ve düzgün bir örnekle açıklayabilecek var mı
Mesaj tarihi:
Ikinci olarak muhtemelen programin daha efektif olmasi. Cok muhtemelen compiler const bir degisken gorunce belli basli seyleri assume ederek cok daha saglikli bir optimizasyon yapiyordur.

Baska vardir belki bilemiyorum. Google en buyuk yardimcin.
Mesaj tarihi:
const typed constantlari define etmek icin kullanilir, #define macro define etmek icin kullanilir. modern C++'da yeri pek kalmadi artik #define'in bu arada.

ama fark diyorsan en onemli fark su, #define preprocessor tarafindan handle ediliyor ve tek yaptigi kodda gordugu tum define edilmis elementleri bildigin bodos bi sekilde replace all yapmak. bence #define'in en buyuk sorunu scoping rulelarin kullanilamamasi. onun haricinde config file ile set edememek vs vs
Mesaj tarihi:
define ile cok buyuk farklari var. Inanilmaz buyuk.

define icin c preprocessor'i okumani oneririm. Ilk olarak define type-safe degil. Daha da otesinde define ile degisken tanimlamiyorsun. Define string replacement olayini yapiyor.

bak soyle bir kod olsun
said:
#define a 3+2
int b = a * 2


bu kodda b'nin degeri 10 degil 7 olur. cunku preprocessor compilerdan once devreye girip a yerine 3+2 yazar. yani compile edilen kod aslinda b = 3 + 2 * 2 oluyor. Hatta bunlari engellemek icin define'da expression yaziyorsan parantez icine alirsin. Ama const bir degiskenin olsa boyle bir sorun yok. a'nin degeri hesaplanip sonra b hesaplaniyor cunku.
Mesaj tarihi:
Çok alakam yok ama şu olaya güvenlik denmesini yıllardır algılayamadım. Constant kullanmayıp değişmemesi gereken şey programında değişiyorsa yanlış yapmışsındır, düpedüz becerememişsindir. Neyin güvenliği bu anlayamadım hiç
Mesaj tarihi:
Yok xaty oyle degil. Ben oyle hic buyuk bir projede calismadim da, dusun yani binlerce satirlik kod var diyelim. Bir suru header falan ic ice girmis. Hadi sen ne yaptigini biliyorsun o hatayi yapmicaksin cok eminsin. Fakat senden sonra kodu maintain etcek kisi o yanlisi yapabilir. Bunlari engelliyorsun iste.
Mesaj tarihi:
xaty said:

Çok alakam yok ama şu olaya güvenlik denmesini yıllardır algılayamadım. Constant kullanmayıp değişmemesi gereken şey programında değişiyorsa yanlış yapmışsındır, düpedüz becerememişsindir. Neyin güvenliği bu anlayamadım hiç


evet işte düşüncem aynı.

define olayına az önce baktım evet typesafe değil.
Mesaj tarihi:
Deacon'un bahsettiği nokta önemli. Kodu okuyan ve değiştiren kişi sayısı çoğaldıkça kodun rahat anlaşılabilir olması daha da önem kazanıyor. Const/final şekilde tanımlayarak amacınızı belli etmiş oluyorsunuz. Ayrıca compiler daha iyi optimize edebiliyor.

Güvenlik konusuna gelince... Her yazılımın -şanslıysanız düzgün tasarlanmış ve dökümanlanmış- bir mimarisi, buna bağlı olarak da farklı katmanları ve bileşenleri var. Bunları geliştiren kişi genelde aynı değil ve bunlar arasında da belli bir veri transferi var.

Sorunlardan biri şu: Herhangi bir bileşenden dışarı bir veri verdiğiniz zaman, o verinin nasıl kullanıldığına karışamıyorsunuz. Dışarıya verdiğiniz bir nesne üzerinden istemediğiniz bir verinin değişmesi mümkün. Veriyi olduğu gibi kopyalamak bir çözüm. Ama büyük bir veri tipiyse deep copy yapmak zorundasınız. İçeriğin tamamını const/final ile sabitlerseniz (keyword: immutability) bu sorunu kökünden çözmüş oluyorsunuz. Ya da en azından değişmemesi gereken şeyleri sabitliyorsunuz.

Başka bir sorun ise birden fazla thread ile veri okuma/yazma, locking ve deadlock. Immutable bir nesnenin içeriği sonradan değişemeyeceği için rahatça birden fazla thread lock gerekmeden aynı nesneyi kullanabiliyor.

Bence sormanız gereken soru "niye kullanmalıyım" değil, "kullanmamam için bir sebep var mı?" olmalı.
×
×
  • Yeni Oluştur...