Sadece rahatsız edici bir şey fark ettim. std::string
Paramater 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::string
bir 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& s
yerine 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 = 0
tanı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ı?