gpt4 book ai didi

c++ - 为什么 ISO C++ 禁止返回数组?

转载 作者:可可西里 更新时间:2023-11-01 16:42:22 24 4
gpt4 key购买 nike

我看不出任何合乎逻辑的理由。我的意思是您可以通过使用包含数组成员的结构轻松地满足要求,如下所示:

template <size_t n>
struct arr { int d[n]; };

auto fnReturningArray()
{
return arr<3>{0, 1, 2};
};

这与直接返回数组的行为完全相同,只是您应该首先访问结构成员 'd' 才能使用它。标准本身也通过“std::array”类型添加了类似的功能。所以它似乎是可以实现的。那么为什么 ISO C++ 禁止这个 Action 呢?也许遗留代码兼容性(但我很难相信这是事实,因为添加的其他新事物早已不复存在,例如“auto”关键字的新含义)。

最佳答案

除了标准不允许的事实以及可以解释它的历史原因之外,问题是句法:

想象一下它是被允许的:你如何区分整个数组的命名、数组地址、单个元素的命名:

auto fnReturningArray()
{
int a[3] = {0, 1, 2};
return a; // what is meant here ? the address of the array ? or the whole array ?
};

如果您要更改现有规则的含义(例如声明 a 将是整个数组),遗留代码将面临巨大问题。

关于c++ - 为什么 ISO C++ 禁止返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27092082/

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