首先,流是如何工作的(意思是为什么我会得到描述的结果)?
根据C++标准(1.9节,第15节):
除非另有说明,个体经营者和单个表达式的子表达式的操作数的评价是未测序。
如果对标量对象的副作用不是相对于同一标量对象的另一副作用或使用相同标量对象的值进行值计算,而且它们不可能是并发的,则行为是未定义的。
适用于您的情况:
其次,我应该怎么做才能得到它的工作?
一个简单的选择是将单个大型输出表达式拆分为多行,这样每个++index
语句都在一个单独的行上。
或者,你可以通过两种使用循环解决问题,reduce repetition。
例如:
#include <array>
#include <iostream>
#include <string>
int main() {
static const std::array<std::string, 3> lines = {
"First line",
"Second line",
"Last line",
};
for (int i = 0; i < lines.size(); ++i) {
std::cout << i + 1 << ") " << lines[i] << std::endl;
}
}
保存为example.cc
,并编译使用:
clang++ -std=c++14 example.cc -o example
然后运行的例子:
$ ./example
1) First line
2) Second line
3) Last line
注意,该打印到标准输出以简化示例,但std::cout
可根据您的使用情况std::ofstream
一个实例很容易地更换。
没有回答你的问题:只需在每个代码行的开始处放一个'outputFile',并在每个代码行的末尾放一个';'(在'endl'后面),就完成了。 –
在同一个语句中对同一个变量使用'++'是未定义的行为(粗略地说,有一些特殊情况太大而不适合注释)。为了避免使用更多的分号,或者写'index + 1','index + 2'等。 –