gpt4 book ai didi

c++ - 在 C++11 循环范围内使用对指针的引用作为序列

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:31 25 4
gpt4 key购买 nike

以下两段代码之间的唯一区别是引用的使用。我理解为什么第一个代码片段无法编译,并且正在寻求帮助以了解为什么第二个代码片段可以编译。

第一个片段:

int a[2][3] = {0,1,2,3,4,5};
for (auto row : a)
for (auto column : row)
cout << column << endl;

上面的代码无法通过编译,因为 'row' 的类型是指向 int 的指针,这不是一个序列。

第二个片段:

int a[2][3] = {0,1,2,3,4,5};
for (auto &row : a)
for (auto column : row)
cout << column << endl;

此代码编译。如果我正确理解 auto 的工作原理,“行”是对指向 int 的指针的引用。但是为什么这个引用可以被看作一个序列而不是一个普通的指针呢?

最佳答案

类型的推导是通过模板参数推导完成的。

template <typename U>
void foo(U&); // Equivalent to auto&

foo(row);

这将始终将 U 推断为 row精确类型(如果它是本例中的左值),这给了我们我们想要的数组类型。
仅针对非引用参数执行数组到指针衰减。

关于c++ - 在 C++11 循环范围内使用对指针的引用作为序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482261/

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