gpt4 book ai didi

c++ - 为什么 free 函数 begin 不能在 C 数组上运行,而 std::begin 在某些情况下可以在 C++14 中运行?

转载 作者:太空狗 更新时间:2023-10-29 22:54:21 25 4
gpt4 key购买 nike

<分区>

我注意到 begin(没有 namespace 说明符)在某些情况下可以编译,而在其他情况下会失败。

你们能解释一下为什么它可以在工作时工作以及为什么会因用例而有所不同吗?

代码在VS2017 15.9.7和gcc-8.3.0下同样编译失败std=c++14 用于两者。vs: error C3861: 'begin': 找不到标识符gcc: 错误: ‘begin’ 未在此范围内声明

#include <array>

struct Struct {
int x;
};

int main()
{
{
std::array<int, 4> arr;
std::begin(arr);
begin(arr); // works, calls the same as std::begin above
}

{
std::pair<int, int> arr[4];
std::begin(arr);
begin(arr); // works, calls the same as std::begin above
}

{
int arr[4];
std::begin(arr);
begin(arr); // error
}

{
Struct arr[4];
std::begin(arr);
begin(arr); // error
}
}

我预计没有 std::的 begin 将永远无法工作,因为它是在 std 命名空间中声明的,而且没有人说使用命名空间 std 或使用 begin。 (或者如果有人做了那么就不会有任何错误)

我调试了标记为“有效”的前两行,我看到它跳转到与前一行相同的 std::begin 实现。

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