C++: is string.empty() always equivalent to string == “”?

前端 未结 7 1767
灰色年华
灰色年华 2020-12-28 12:18

Can I make an assumption that given

std::string str;
... // do something to str

Is the following statement is always true?

         


        
7条回答
  •  無奈伤痛
    2020-12-28 12:35

    It should be. The ANSI/ISO standard states in 21.3.3 basic_string capacity:

    size_type size() const;

    Returns: a count of char-like objects currently in the string.

    bool empty() const;

    Returns: size() == 0

    However, in clause 18 of 21.3.1 basic_string constructors it states that the character-type assignment operator uses traits::length() to establish the length of the controlled sequence so you could end up with something strange if you are using a different specialization of std::basic_string<>.

    I think that the 100% correct statement is that

    (str.empty() == (str == std::string()))
    

    or something like that. If you haven't done anything strange, then std::string("") and std::string() should be equivalent

    They are logically similar but they are testing for different things. str.empty() is checking if the string is empty where the other is checking for equality against a C-style empty string. I would use whichever is more appropriate for what you are trying to do. If you want to know if a string is empty, then use str.empty().

提交回复
热议问题