C++: is string.empty() always equivalent to string

2020-02-17 21:44发布

Can I make an assumption that given

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

Is the following statement is always true?

(str.empty() == (str == ""))

标签: c++ string
7条回答
男人必须洒脱
2楼-- · 2020-02-17 22:40

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().

查看更多
登录 后发表回答