这段代码片段是否正确,或者会导致未定义的行为?
std::string s; assert(strlen(s.c_str())==0);
如果不是未定义行为,那么上述断言会通过吗?
这是非常清晰明确的,且断言通过。c_str()函数将始终返回一个有效的以零结尾的C字符串。
通常使用empty()来测试空字符串。
是的,它可以工作(如果您追加()到c_str以使其实际调用函数),并且断言将通过。
()
c_str
如果启用了断言,这是一个编译错误,因为const char *(std::string::*)()不能隐式转换为const char *。
const char *(std::string::*)()
const char *
(开玩笑的)