ofstream:运行 索引不起作用
ofstream: running index doesn't work
我想将多行写入一个文件。每行都有一个索引(运行 索引)。
我的代码是:
ofstream outputFile;
int index = 0;
outputFile << ++index << ") FirstLine" <<endl
<< ++index << ") SecondLine" <<endl
...
<< ++index << ") LastLine" <<endl;
问题是我没有得到 运行 索引。也就是说,所有行都具有相同的索引(即总行数)。所以我的问题首先是,ofstream 是如何工作的(意思是为什么我会得到描述的结果)。其次,我应该怎么做才能让它发挥作用?
Firstly, how does ofstream work (meaning why do I get the described result)?
根据 C++ 标准(第 1.9 节,第 15 条):
Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced.
If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, and they are not potentially concurrent, the behavior is undefined.
适用于您的情况:
++index
语句(<<
运算符的操作数)的计算未排序。
++index
修改 index
的值,因此对标量对象有副作用。
因此,行为未定义。
Secondly, what should I do to get it work?
一个简单的选择是将单个大输出表达式拆分为多行,这样每个 ++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
的实例。
我想将多行写入一个文件。每行都有一个索引(运行 索引)。 我的代码是:
ofstream outputFile;
int index = 0;
outputFile << ++index << ") FirstLine" <<endl
<< ++index << ") SecondLine" <<endl
...
<< ++index << ") LastLine" <<endl;
问题是我没有得到 运行 索引。也就是说,所有行都具有相同的索引(即总行数)。所以我的问题首先是,ofstream 是如何工作的(意思是为什么我会得到描述的结果)。其次,我应该怎么做才能让它发挥作用?
Firstly, how does ofstream work (meaning why do I get the described result)?
根据 C++ 标准(第 1.9 节,第 15 条):
Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced.
If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, and they are not potentially concurrent, the behavior is undefined.
适用于您的情况:
++index
语句(<<
运算符的操作数)的计算未排序。++index
修改index
的值,因此对标量对象有副作用。因此,行为未定义。
Secondly, what should I do to get it work?
一个简单的选择是将单个大输出表达式拆分为多行,这样每个 ++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
的实例。