解读 C 11 中非成员 begin 和 end 函数的好处
在 C 11 中,非成员 begin 和 end 函数的存在最终函数对其重要性和好处提出了质疑。虽然它们本质上镜像了标准容器中的成员函数,但仍有一些潜在的优势需要考虑。
问题:
为什么要使用自由函数 std::begin 和 std ::end 而不是容器处理中迭代器的成员对应项?
答案:
1。泛型编程扩展:
非成员函数为泛型编程提供了灵活性。当处理无法修改的数据结构(例如 C 数组)时,自由函数提供了一个解决方案。例如, std::begin(array) 和 std::end(array< /span>) 可用于检索此类数据结构的迭代器,从而允许在通用算法中进行统一处理。
考虑使用 std::sort 对数组进行排序的示例:
<code class="cpp">int arr[] = {1, 3, 2, 5, 4}; std::sort(std::begin(arr), std::end(arr));</code>
在这种情况下,std::begin 和 std::end 可以实现 C 数组的无缝排序,而无需成员函数可用性。
2.处理具有不明确成员函数的结构:
处理可能定义名为 begin 和 end 的成员函数的结构时会出现另一个优点。在这种情况下,会出现歧义,因为成员版本和非成员版本都可供编译器使用。通过显式指定 std::begin 和 std::end,可以解决这种歧义,确保预期的功能。
结论:
虽然自由函数可能不会引入为标准容器节省了大量的字符,它们为通用编程和处理具有不明确成员函数的非标准容器或结构提供了巨大的好处。它们的采用符合 C 11 对可扩展性、灵活性和提高代码清晰度的强调。
以上是为什么在 C 11 中的成员函数上使用 `std::begin` 和 `std::end` ?的详细内容。更多信息请关注PHP中文网其他相关文章!