为什么“应使用 'empty' 方法来检查是否为空,而不是使用 clang-tidy 的 'size”?

joe*_*pol 0 c++ containers std stdvector clang-tidy

执行检查时:

std::string st = "hello";
bool is_empty = st.size() > 0;
Run Code Online (Sandbox Code Playgroud)

我收到了上面提到的 Clang-Tidy 警告。

为什么最好使用该empty()方法?

joe*_*pol 11

根据Clang 文档

可读性容器大小空

检查对 size() 方法的调用是否可以替换为对 empty() 的调用。

应使用 empty() 方法而不是 size() 方法检查容器的空性。不保证 size() 是一个恒定时间函数,它通常更有效,也更清楚地表明使用 empty() 的意图。此外,一些容器可能实现了 empty() 方法,但没有实现 size() 方法。尽可能使用 empty() 可以在将来更轻松地切换到另一个容器。

std::forward_list是没有size()方法的容器的示例,如下所示:do-all-containers-have-a-size-function

根据isocpp的标准,C++11的时间复杂度size()恒定的