首先,流是如何工作的(意思是爲什麼我會得到描述的結果)?
根據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'等。 –