Burada yayınlanan sebeplerin yanı sıra, başka bir tane de ikili uygunluk bulunmaktadır . Kütüphanelerin yazarları, hangi std::stringuygulamayı kullandığınız ve onunkilerle aynı bellek düzenine sahip olup olmadığının kontrolü yoktur .
std::stringbir şablon olduğundan, uygulaması yerel STL başlıklarınızdan alınır. Şimdi, standart olarak tam uyumlu, performans açısından optimize edilmiş bazı STL versiyonlarını kullandığınızı hayal edin. Örneğin, std::stringdinamik ayırma sayısını ve önbellek eksikliğini azaltmak için her birine statik tampon girmeyi tercih etmiş olabilirsiniz . Sonuç olarak, uygulamanızın bellek düzeni ve / veya boyutu kütüphaneinkinden farklı.
Yalnızca düzen farklıysa, bazı std::stringüye işlevi kitaplıktan istemciye iletilen örnekler üzerinde çağrı yapar veya diğer üyeler hangi üyelerin kaydırıldığına bağlı olarak başarısız olabilir.
Eğer boyut da farklıysa, std::stringüyeli tüm kütüphane tipleri kütüphanede ve müşteri kodunda kontrol edildiğinde farklı boyutta görünecektir. std::stringÜyeyi takip eden veri üyeleri de ofsetlerde kaymış olacak ve müşteriden çağrılan herhangi bir doğrudan erişim / satır içi erişimci, kitaplığın kendisinde hata ayıklama yaparken "iyi görünmesine" rağmen çöpü geri getirecektir.
Sonuç olarak - eğer kütüphane ve müşteri kodu farklı std::stringversiyonlar için tekrar derlenirse , sadece gayet iyi bağlanırlar , ancak anlaşılması zor bazı hatalara yol açabilir. std::stringUygulamanızı değiştirirseniz, STL'den üye olan tüm kütüphanelerin, müşterinin std::stringdüzeniyle eşleşmesi için derlenmesi gerekir . Programcılar kütüphanelerinin sağlam olmasını istediklerinden, nadiren std::stringher yerde görülebildiğini göreceksiniz .
Adil olmak gerekirse, bu tüm STL tipleri için geçerlidir. IIRC'de standart bellek düzeni yoktur.