ฉันเพิ่งรู้ว่ามีอะไรรบกวน ทุกครั้งที่ฉันได้เขียนวิธีการที่ยอมรับstd::string
ว่าเป็นพารามิเตอร์ฉันได้เปิดตัวเองเพื่อพฤติกรรมที่ไม่ได้กำหนด
ตัวอย่างเช่นสิ่งนี้ ...
void myMethod(const std::string& s) {
/* Do something with s. */
}
... สามารถเรียกได้ว่าเป็นแบบนี้ ...
char* s = 0;
myMethod(s);
... และไม่มีอะไรที่ฉันสามารถทำได้เพื่อป้องกันมัน (ที่ฉันรู้)
ดังนั้นคำถามของฉันคือ: มีคนป้องกันตัวเองจากสิ่งนี้ได้อย่างไร
วิธีการเดียวที่อยู่ในใจคือการเขียนวิธีการสองแบบที่ยอมรับstd::string
เป็นพารามิเตอร์ดังนี้:
void myMethod(const std::string& s) {
/* Do something. */
}
void myMethod(char* s) {
if (s == 0) {
throw std::exception("Null passed.");
} else {
myMethod(string(s));
}
}
นี่เป็นวิธีแก้ปัญหาทั่วไปและ / หรือที่ยอมรับได้หรือไม่?
แก้ไข: บางคนชี้ให้เห็นว่าฉันควรยอมรับconst std::string& s
แทนที่จะstd::string s
เป็นพารามิเตอร์ ฉันเห็นด้วย. ฉันแก้ไขโพสต์ ฉันไม่คิดว่าจะเปลี่ยนคำตอบ
char* s = 0
กำหนด ฉันเคยเห็นมันอย่างน้อยสองสามร้อยครั้งในชีวิตของฉัน (มักจะอยู่ในรูปแบบของchar* s = NULL
) คุณมีข้อมูลอ้างอิงเพื่อสำรองข้อมูลหรือไม่?
std:string::string(char*)
สร้าง
const std::string&
ค่าพารามิเตอร์นั้น ... ?)
c_str
คุณสมบัติของวัตถุสตริงได้