【发布时间】:2016-04-01 08:33:42
【问题描述】:
我被困在 C++ Primer 中的一段代码中,并且思考了 1 个多小时。代码是
for (auto row : ia)//should use &row here
for (auto col : row)
对它的解释是
我们这样做是为了避免正常的数组到指针的转换。因为 row 不是引用,当编译器 初始化行,它将转换每个数组元素(就像任何其他数组类型的对象一样) 指向该数组的第一个元素的指针。结果,在这个循环中,行的类型是 诠释*。内部 for 循环是非法的。尽管我们的意图,该循环试图 迭代一个 int*。
我知道这与每次执行 for(auto col:row) 时的迭代有关。我无法理解
我们这样做是为了避免正常的数组到指针的转换"
我们为外循环传入的“ia”是什么形式的?它应该是指向其第一个元素地址的指针而不是“具体”数组吗?那么内循环有什么问题呢?我认为它应该是与外循环相同的机制。我无法理解问答上的帖子。有人请赐教...我的理解有什么问题...也欢迎一个好的链接!提前谢谢了!
ia 的声明是
constexpr size_t rowCnt = 3, colCnt = 4;
int ia[rowCnt][colCnt]; // 12 uninitialized elements
// for each row
for (size_t i = 0; i != rowCnt; ++i) {
// for each column within the row
for (size_t j = 0; j != colCnt; ++j) {
// assign the element's positional index as its value
ia[i][j] = i * colCnt + j;
}
}
【问题讨论】: