此代码片段是正常还是导致未定义的行为?
std::string s;
assert(strlen(s.c_str())==0);
如果它不是未定义的行为,上述断言是否会通过?
答案 0 :(得分:9)
这是完全明确的定义,断言通过。 c_str()函数将始终返回有效的零终止C字符串。
通常会使用empty()来测试空字符串。
答案 1 :(得分:5)
是的,它会起作用(如果您将()
附加到c_str
以使其实际调用该函数)并且断言将通过。
答案 2 :(得分:1)
这是编译错误(如果启用了断言),因为const char *(std::string::*)()
无法隐式转换为const char *
。
(舌头只在脸颊中间。)