小编use*_*726的帖子

std :: end for strings是否应该指向null终结符?

我注意到,std::end当涉及到字符串或字符数组时,它总是会引用null终止符.我认为std::end应该引用最后一个有效元素后面的数组的结尾.是'\0'不是有效的元素?它是阵列的一部分.以下是一些都返回true的测试:

#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;
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

3
推荐指数
1
解决办法
999
查看次数

标签 统计

c++ ×1

c++11 ×1

iterator ×1