2008-10-26 20 views
6

Bir answer to one of my questions, aşağıdaki kod satırını içerir:Std :: safe_string nedir?

label = std::safe_string(name); // label is a std::string 

Niyet, bir dizgenin tam anlamıyla bir sargılayıcı gibi görünmektedir (bu nedenle büyük olasılıkla tahsis gerçekleşmez). Xzx12'yi hiç duymadım ve görünüşe göre google (ne de 98 standardında bulamadım).

Bunun ne olduğunu bilen var mı?

cevap

8

:

sıfır uzunluğunda dizelerine NULL s dönüştürür
//tools-cgi.cpp 
string safe_string (const char * s) 
{ 
    return (s != NULL) ? s : ""; 
} 

. Bu standart olmamakla birlikte, cevapta atıfta bulunulan belirli bir STL uygulamasında bir çeşit uzama olabilir.

5

standart safe_string yoktur std::safe_string

6

diye bir şey yoktur. Bu yanıtın yanıtında gördüğünüz safe_string, özel bir STL eklentileri yardımcı program kitaplığına benzeyen bir şeydir.

Google for "stlext/stringext.h" ve başka bir forumdaki bir gönderide başvurulan aynı kitaplığı göreceksiniz. (Ben ilk bu düşünmeliydin ...) bunu buldum google code search arama yaptıktan sonra

+0

Aramanızın sonuçları "safe_string" içermiyor. – Motti

0

Bir std :: string NULL karakter * dizesiyle bir istisna önlemek için yardımcı işlevi aynı tür kullanarak C++ standart (ama belki de olmalıdır?)

I have been parçası değildir.

// defined somewhere else as "" 
extern const char * const g_strEmptyString ; 

inline const char * safe_string(const char * p) 
{ 
    return (p) ? (p) : (g_strEmptyString) ; 
} 

Hiçbir havai ve bir std hiçbir çarpışma :: dize ben NULL olabilecek bir char * dizge beslemek ama bu, bu özel durumda, bir şekilde davranması gerektiği: Ama gibi daha fazla bir şeydi boş dize.

+0

Neden g_strEmptyString'e ihtiyacınız var, "" hile yapmıyor. – Motti

+0

"" kullanımı 1 baytlık bir tam nesneyi oluşturur. Derleyici akıllı değilse, her biri farklıdır ve bu nedenle kod potansiyel olarak şişirebilir. Derleyicinin bunu optimize etmek için yeterince akıllı olduğundan şüphelenirim ve bu yanlış bir kazançtır ve kodu karmaşıklaştırır. –

+1

Derleyicinin her bir vakayı doğru bir şekilde ele alması gerekiyorsa ve ““ geri dönüşten hayatta kalmak ”durumunda bile, yerel nesneler için işaretçi veya referanslar döndürme fikrinden rahatsızlık duyuyorum. – paercebal

İlgili konular