Sadece rahatsız edici bir şey fark ettim. std::stringParamater olarak kabul eden bir yöntem her yazışımda, kendimi tanımlanmamış davranışa açtım.
Örneğin, bu ...
void myMethod(const std::string& s) {
/* Do something with s. */
}
... böyle denebilir ...
char* s = 0;
myMethod(s);
... ve bunu önlemek için yapabileceğim hiçbir şey yok (farkında olduğum).
Benim sorum şu: Birisi kendini bundan nasıl koruyor?
Akla gelen tek yaklaşım, her zaman std::stringbir parametre olarak kabul eden herhangi bir yöntemin iki versiyonunu yazmaktır , örneğin:
void myMethod(const std::string& s) {
/* Do something. */
}
void myMethod(char* s) {
if (s == 0) {
throw std::exception("Null passed.");
} else {
myMethod(string(s));
}
}
Bu yaygın ve / veya kabul edilebilir bir çözüm müdür?
DÜZENLEME: Bazıları parametre const std::string& syerine kabul etmem gerektiğini belirtti std::string s. Katılıyorum. Gönderiyi değiştirdim. Bunun cevabı değiştirdiğini sanmıyorum.
char* s = 0tanımsız olduğunu bilmiyordum . Hayatımda (genellikle şeklinde char* s = NULL) en az birkaç yüz kez gördüm . Bunu destekleyecek bir referansınız var mı?
std:string::string(char*)yapıcı kastediyorum
const std::string&bu parametre için bir alamadığınızdan emin misiniz ...?)
c_strözelliğini kontrol edememenizin herhangi bir nedeni var mı?