Search code examples
c++containersstdstdvectorclang-tidy

Why "The 'empty' method should be used to check for emptiness instead of 'size" by clang-tidy?


When performing the check:

std::string st = "hello";
bool is_empty = st.size() > 0;

I get the Clang-Tidy warning mentioned above.

Why is it better to use the empty() method instead?


Solution

  • According to Clang documentation

    readability-container-size-empty

    Checks whether a call to the size() method can be replaced with a call to empty().

    The emptiness of a container should be checked using the empty() method instead of the size() method. It is not guaranteed that size() is a constant-time function, and it is generally more efficient and also shows clearer intent to use empty(). Furthermore some containers may implement the empty() method but not implement the size() method. Using empty() whenever possible makes it easier to switch to another container in the future.

    std::forward_list is and example to a container that doesn't have size() method as seen here : do-all-containers-have-a-size-function

    After C++11 time complexity of size() is constant according to its standard by isocpp