调用空字符串的c_str函数

12

这段代码片段是否正确,或者会导致未定义的行为?

std::string s;
assert(strlen(s.c_str())==0);

如果不是未定义行为,那么上述断言会通过吗?

3个回答

13

这是非常清晰明确的,且断言通过。c_str()函数将始终返回一个有效的以零结尾的C字符串。

通常使用empty()来测试空字符串。


6

是的,它可以工作(如果您追加()c_str以使其实际调用函数),并且断言将通过。


3

如果启用了断言,这是一个编译错误,因为const char *(std::string::*)()不能隐式转换为const char *

(开玩笑的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接