gpt4 book ai didi

c++ - 如何使用 begin() 自由函数

转载 作者:太空狗 更新时间:2023-10-29 23:30:23 26 4
gpt4 key购买 nike

我目前正在编写一个处理通用容器的函数模板。由于上述原因,我想使用 std::begin()std::end() in this question .我的问题是,我是否应该使用:

std::begin( myContainer )

或者:

using namespace std; // Better use: "using std::begin"
begin( myContainer )

或者换句话说,是否可以在 std 命名空间中重载 begin()?我是否应该允许我函数的用户在其他地方重载 begin() 函数在全局命名空间中? STL是怎么处理的?

最佳答案

不需要 using 指令,所以我们假设第二个片段包含一个 using 声明。

using std::begin;

如果您要创建自己的容器来使用此函数模板,请提供 Container::begin()Container::end() 成员函数,以及那么无论您使用第一个还是第二个都没有区别。 std::begin()std::end() 将在可用时调用各自的成员函数(§24.7 [iterator.range] ).

另一方面,如果您正在创建一个函数模板,它应该适用于任何容器,标准库中存在的容器,或自定义容器;我推荐第二种方法。

using std::begin;
begin( myContainer );

请注意,这将启用 ADL在与容器定义相同的命名空间内,为自由函数 begin()end() 查找用户定义的重载。不应将重载添加到命名空间 std 或全局命名空间(除非容器定义也在全局命名空间中)。在没有这些自由函数重载的情况下,std::begin 将被调用(因为 using 声明),这又将调用 Container::begin ()

关于c++ - 如何使用 begin() 自由函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com