gpt4 book ai didi

C++ : auto variable deduction differs range for loop vs a normal for loop for multi dimensional array

转载 作者:行者123 更新时间:2023-11-30 01:39:20 25 4
gpt4 key购买 nike

内容如下:

int ia [3][4] =  {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
  1. 正常分配:

    auto p = ia;

    这是可以理解的。
    数组 ia 返回指向其第一个元素的指针,该元素是 4 个元素的第一行(4 个元素的批处理)。
    p 有 int (*)[4]。执行 p + 1 将指向下一批 4 个元素。

  2. 使用范围:

    for (auto row : ia) {
    for (auto col: row)
    cout << col << " ";
    cout << endl;
    }

    为什么 row 不是 int (*)[4] 因为每个循环都像前面的例子一样返回 4 个元素的批处理?
    相反,它是 int *.
    当我将鼠标悬停在 row 变量上时,它会给我 int *..

谢谢

最佳答案

基于范围的 for 循环获取每个数组元素,并在每个循环中从给定初始值设定项派生的声明或表达式中使用它。数组元素的类型为 int[4],因此对于表示当前范围元素的发明变量 int __elem[4],您的循环体有效地表示:

const auto row = __elem;   // __elem is int[4]

现在这应该看起来很熟悉:右边的数组表达式衰减为指向其第一个元素的指针,因此类型为 int

如果你想避免衰减,你需要绑定(bind)一个引用:

const auto& row = __elem;    // row is int(&)[4]

将其放回到基于范围的循环中,您需要:

for (const auto& row : ia) {
for (const int& cell : row) {
// ...
}
}

关于C++ : auto variable deduction differs range for loop vs a normal for loop for multi dimensional array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46085438/

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