gpt4 book ai didi

c++ - "using std::begin;"是一个好习惯吗?

转载 作者:太空狗 更新时间:2023-10-29 19:37:52 25 4
gpt4 key购买 nike

正如我所读到的,begin(some_vector)some_vector.begin() 更标准,因为它支持数组...而且据我所知,使用using keyword 并不是真正理想的行为。但是,我也看到很多代码只包含这两个 usings:

using std::begin;
using std::end;

这是好事还是坏事?尤其是当需要很多 beginend 的时候?

最佳答案

As I have read, begin(some_vector) is more standard than some_vector.begin() because of array support

不是“更标准”,都是100%标准。它更通用,因为它适用于数组,但拥有一个对象却不知道它是数组还是容器类型的情况实际上并不常见。如果您知道某些东西是数组,则使用 std::begin(a) 但如果您知道某些东西不是数组,那么使用同样有效的形式没有任何优势与数组。如果您处于可能有任何一种情况的通用上下文中,则 std::begin 适用于这两种情况。

the use of using keyword is not really desirable behavior.

这是有争议的。在大多数上下文中有很好的理由避免使用指令(即 using namespace foo),但相同的论点不适用于引入单个名称的 using 声明(即 using foo::栏)。例如,推荐使用 std::swap 的方法是通过 using std::swap 所以 using 关键字是不受欢迎的肯定不是真的一般而言。

Is that considered good or bad practice? Especially when many begin and end are needed?

我会说,总的来说这是个坏主意。正如其他答案所解释的那样,它允许 ADL 找到 beginend ,但这不一定是好事。为 beginend 启用 ADL 可能会导致问题,这就是为什么我们在最后一分钟将基于范围的 for 更改为 not 使用 using std::begin;使用 std::end; 避免歧义,参见 N3257了解详情。

关于c++ - "using std::begin;"是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31604984/

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