Anlatılan gibi bazı durumlarda, C ++ Standardı, derleyicilerin, davranışlarının öngörülebilir olmasını gerektirmeden, müşterilerini en yararlı bulacakları şekilde yapıları işlemesine izin verir. Başka bir deyişle, bu tür yapılar "Tanımsız Davranış" ı çağrıştırır. Bununla birlikte, bu tür yapıların "yasak" anlamına geldiği anlamına gelmez, çünkü C ++ Standardı, iyi biçimlendirilmiş programların ne yapmasına izin verildiğine ilişkin yargı yetkisini açıkça feragat eder. C ++ Standardı için yayınlanan herhangi bir Rationale belgesinin farkında olmamakla birlikte, C89 gibi Tanımsız Davranışı tanımlaması, amaçlanan anlamın benzer olduğunu düşündürür: "Tanımsız davranış, uygulayıcıya zor olan bazı program hatalarını yakalamamasını sağlar teşhis etmek.
Bir şeyi işlemenin en etkili yolunun, bir yapının aşağı akış kodunun ilgileneceği kısımlarını yazmayı içerdiği ve aşağı akış kodunun ilgilenmeyeceği şeyleri atladığı birçok durum vardır. Programların, hiçbir şeyin umursamayacağı olanlar da dahil olmak üzere, bir yapının tüm üyelerini başlatmasını zorunlu kılmak, verimliliği gereksiz yere engelleyecektir.
Ayrıca, başlatılmamış verilerin deterministik olmayan bir şekilde davranmasının en etkili olabileceği bazı durumlar vardır. Örneğin, verilenler:
struct q { unsigned char dat[256]; } x,y;
void test(unsigned char *arr, int n)
{
q temp;
for (int i=0; i<n; i++)
temp.dat[arr[i]] = i;
x=temp;
y=temp;
}
alt kodu herhangi elemanlarının değerleri bakım eğer x.dat
ya y.dat
olan endeksler listelenmeyen edildi arr
, kod için optimize edilebilir:
void test(unsigned char *arr, int n)
{
q temp;
for (int i=0; i<n; i++)
{
int it = arr[i];
x.dat[index] = i;
y.dat[index] = i;
}
}
Programcıların temp.dat
, kopyalamadan önce aşağı yönde ilgilenmeyenler de dahil olmak üzere, her öğesini açıkça yazmaları gerekiyorsa, verimlilikteki bu gelişme mümkün olmazdı.
Öte yandan, veri sızıntısı olasılığından kaçınmanın önemli olduğu bazı uygulamalar vardır. Bu tür uygulamalarda, aşağı akış kodunun ona bakıp bakmayacağına bakılmaksızın başlatılmamış depolama alanını kopyalamaya yönelik herhangi bir girişimi yakalamak için kullanılan kodun bir sürümüne sahip olmak yararlı olabilir veya herhangi bir depolama alanının İçeriği sızdırabilenler, gizli olmayan verilerle sıfırlanır veya üzerine yazılır.
Söyleyebileceğim kadarıyla, C ++ Standardı, bu davranışların herhangi birinin diğerini zorunlu kılmak için yeterince yararlı olduğunu söylemek için hiçbir girişimde bulunmaz. İronik olarak, bu spesifikasyon eksikliğinin optimizasyonu kolaylaştırması amaçlanabilir, ancak programcılar herhangi bir zayıf davranışsal garantiden yararlanamazsa, herhangi bir optimizasyon reddedilecektir.