这是 C++17 标准定义 for 语句的方式:
for ( init-statement condition??? ; expression??? ) statement
Run Code Online (Sandbox Code Playgroud)
我还查看了https://en.cppreference.com/w/cpp/language/for:
attr(optional) for ( init-statement condition(optional) ; iteration_expression(optional) ) statement
Run Code Online (Sandbox Code Playgroud)
因此,我只能理解在使用 for 循环时 init-statement 不是可选的。换句话说,必须在标头内初始化一些变量才能使用这种控制机制流。好吧,情况似乎并非如此,因为当我键入诸如
for (; a != b; ++a)
Run Code Online (Sandbox Code Playgroud)
假设我已经定义了这些变量,它运行得很好。我不仅没有在头文件中声明变量,还引用了之前在循环外定义的其他变量。如果我要提供一个 init 语句,它的对象只能在 for 循环内使用,但似乎我可以使用在其他地方声明的变量就好了。
得出这个结论后,我认为我不需要第一部分:尝试删除分号以使其更具可读性(好吧,只是为了它)。它现在不会编译。编译器说它期望 a ;,计算a != b就好像它不在 for 循环中:“C4552:'!=':未使用表达式的结果”并最终得出结论:“C2143:语法错误:缺少 ';' 在 ')'" 之前。
您不需要 init 语句,但确实需要分号。为什么我引用的这些资源最初没有明确说明这一点,或者以某种方式暗示我是盲目的?
本书提供了以下示例:
int arr[10][20][30] = {0}; // initialize all elements to 0
Run Code Online (Sandbox Code Playgroud)
我目前的理解:它是一个大小为10的数组,包含10个元素,所有元素都是数组本身,大小为20,包含20个元素,所有元素都是数组本身,大小为30,包含30个元素,所有元素都是int.
书中是这样写的:
首先我们看到这
arr是一个大小为 10 的数组。该数组的元素本身就是大小为 20的数组。这些数组中的每一个都有 30 个类型为 的元素int。
否:这 20 个元素中的每一个都是大小为 30 的数组,由 30 个类型为 的元素组成int。
我的阅读理解能力很差还是这本书有问题?