【发布时间】:2018-08-27 11:22:18
【问题描述】:
考虑以下代码,它将精确地计算出success 3 次:
int arr [3];
for(int& value : arr )
std::cout << "success" << std::endl;
如果我尝试在堆上分配数组,就会出现问题。此代码无法编译:
int* ptr = new int[3];
for(int& value : *ptr )
std::cout << "success" << std::endl;
由于指针被取消引用,类型应该相同。所以我有一些问题:
- 当我从硬件上问这两种表达方式的根本区别是什么。我想了解为什么后者没有意义。
- 我可以通过一个小改动让它工作吗?
【问题讨论】:
-
使用堆分配数组时,数组的大小信息会丢失。
-
Re: "will cout
success" --cout是名词,不是动词。 -
如果
range_expression是一个容器,它有成员begin和end,否则它是一个调用std::begin(c)的内置数组。 en.cppreference.com/w/cpp/language/range-for