Uygulama tanımlı davranış ve Tanımlanmamış davranış
C ++ standardı, çeşitli yapıların etkileri konusunda çok spesifiktir ve özellikle bu sorun kategorilerinin her zaman farkında olmalısınız :
Tanımlanmamış davranış, kesinlikle hiçbir garantinin verilmediği anlamına gelir. Kod işe yarayabilir veya sabit sürücünüzü ateşe verebilir veya iblislerin burnunuzdan uçmasına neden olabilir . C ++ dili söz konusu olduğunda, kesinlikle her şey olabilir. Pratik anlamda, bu genellikle kurtarılamaz bir hatanız olduğu anlamına gelir. Bu olursa, uygulamanızla ilgili hiçbir şeye gerçekten güvenemezsiniz (çünkü bu tanımlanmamış davranışın etkilerinden biri, uygulamanızın geri kalanı tarafından kullanılan belleği bozmak olabilir). Tutarlı olması gerekli değildir, bu nedenle programı iki kez çalıştırmak farklı sonuçlar verebilir. Ayın evrelerine, giydiğiniz gömleğin rengine veya kesinlikle başka herhangi bir şeye bağlı olabilir.
Belirtilmemiş davranış, programın mantıklı ve tutarlı bir şey yapması gerektiği anlamına gelir, ancak bunu belgelemesine gerek yoktur .
Uygulama tanımlı davranış, belirtilmemiş davranışa benzer, ancak derleyici yazarlar tarafından da belgelenmelidir. Buna bir örnek, bir reinterpret_cast
. Genellikle , sadece adresi değiştirmeden, bir kalem türünü değiştirir, ancak bir derleyici böylece haritalama, aslında uygulama tanımlı olduğu verebilir sürece bu seçimi belgelendiği gibi, tamamen farklı bir adrese map. Başka bir örnek de int boyutudur. C ++ standardı 2, 4 veya 8 bayt olması umurunda değil, ancak derleyici tarafından belgelenmesi gerekiyor
Ancak bunların hepsinde ortak olan, en iyi şekilde kaçınılmalarıdır. Mümkün olduğunda, C ++ standardının kendisi tarafından% 100 belirtilen davranışa bağlı kalın. Bu şekilde taşınabilirlik garanti edilir.
Sıklıkla bazı uygulama tanımlı davranışlara da güvenmeniz gerekir. Bu kaçınılmaz olabilir, ancak yine de buna dikkat etmeli ve farklı derleyiciler arasında değişebilecek bir şeye güvendiğinizi bilmelisiniz.
Öte yandan, tanımlanmamış davranışlardan her zaman kaçınılmalıdır. Genel olarak, programınızın bir şekilde patlamasına neden olduğunu varsaymalısınız.