我注意到std::end
在涉及字符串或字符數組時總是會引用空終止符。我認爲std::end
應該是指最後一個有效元素後面的數組的末尾。 '\0'
不被視爲有效元素?它是數組的一部分。這裏有一些測試,所有返回true:應該std ::結束爲字符串指向空過終止符?
#include <iostream>
int main()
{
std::string s("hello!");
auto s_end = *(s.data() + s.size() + 1);
std::cout << std::boolalpha << (*std::end(s) == s_end) << "\n"
<< (s_end == '\0') << "\n";
char buf[6 + 1];
std::copy(s.begin(), s.end(), &buf[0]);
auto buf_end = *(buf + s.size() + 1);
std::cout << (*std::end(buf) == buf_end) << "\n"
<< (buf_end == '\0') << "\n";
char test[3] = {'h', '\0', 'e'};
std::cout << (*std::end(test) == '\0');
return 0;
}
'end'迭代器不可解引用。通過取消引用,您的程序會顯示未定義的行爲。 – 2014-09-19 02:48:25
null終止符不是被認爲存儲在'std :: string'中的一部分。例如,它不包含在'size()'中,而不是由'back()'返回。 – 2014-09-19 02:49:36