該代碼片段是否正確或者是否會導致未定義的行爲?調用空字符串的c_str
std::string s;
assert(strlen(s.c_str())==0);
如果它不是未定義的行爲,上述斷言是否會通過?
該代碼片段是否正確或者是否會導致未定義的行爲?調用空字符串的c_str
std::string s;
assert(strlen(s.c_str())==0);
如果它不是未定義的行爲,上述斷言是否會通過?
是的,它會工作(如果你追加()
到c_str
,使之能調用函數),並斷言會通過。
這是一個編譯錯誤(如果您啓用了斷言),因爲const char *(std::string::*)()
不能隱式轉換爲const char *
。
(舌僅在臉頰中間。)
這是非常好的定義和斷言通過。 c_str()函數將始終返回一個有效的零終止的C字符串。
通常會使用empty()來測試空字符串。