为什么要为 ifstream 指定 std::ios::in?
Why specifying std::ios::in for ifstream?
我想用ifstream
加载一个字体文件到内存中,交给FreeType。我发现标准 I/O 设施有点令人沮丧。现在我的问题是为什么我必须为 ifstream
指定 std::ios::in
? ifstream
这个名字就已经隐含了输入操作的意思,何必还要这种无谓的混淆呢?我们可以用 out
指定 ifstream
吗?如果我不指定它会发生什么?来自 cppreference 的示例:
std::ifstream f1("test.bin", std::ios::binary);
这里没有使用默认参数std::ios::in
。为什么?
For now my question is why I have to specify std::ios::in
for ifstream?
你不知道。它总是通过按位或运算附加相应的标志。 documentation 明确指出:
First, performs the same steps as the default constructor, then
associates the stream with a file by calling rdbuf()->open(filename, mode | std::ios_base::in)
Can we specify ifstream with out?
是的。这只会请求文件缓冲区也以写入模式打开文件,可能会在此过程中创建它。当然,istream
接口不允许任何输出操作,但您可以 re-use filebuf
其他 operations/streams 没有 closing/re-opening 文件。
我想用ifstream
加载一个字体文件到内存中,交给FreeType。我发现标准 I/O 设施有点令人沮丧。现在我的问题是为什么我必须为 ifstream
指定 std::ios::in
? ifstream
这个名字就已经隐含了输入操作的意思,何必还要这种无谓的混淆呢?我们可以用 out
指定 ifstream
吗?如果我不指定它会发生什么?来自 cppreference 的示例:
std::ifstream f1("test.bin", std::ios::binary);
这里没有使用默认参数std::ios::in
。为什么?
For now my question is why I have to specify
std::ios::in
for ifstream?
你不知道。它总是通过按位或运算附加相应的标志。 documentation 明确指出:
First, performs the same steps as the default constructor, then associates the stream with a file by calling
rdbuf()->open(filename, mode | std::ios_base::in)
Can we specify ifstream with out?
是的。这只会请求文件缓冲区也以写入模式打开文件,可能会在此过程中创建它。当然,istream
接口不允许任何输出操作,但您可以 re-use filebuf
其他 operations/streams 没有 closing/re-opening 文件。