ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日,周三晚上

今天我看到了这样的两行代码:

cpp 复制代码
std::ofstream file("example.txt", std::ios_base::out);

std::ofstream file("example.txt", std::ios::out);

这让我产生了几个疑问:

为什么有时候用ios_base::out,有时候用ios::out?

ios_base::out和ios::out之间有区别吗?

我花了一两个小时才搞清楚....


目录

  • 结论
  • [ios_base类的 I/O 流控制标志有哪些](#ios_base类的 I/O 流控制标志有哪些)
  • [ios类的 I/O 流控制标志有哪些](#ios类的 I/O 流控制标志有哪些)
  • 证明它们是一样的

结论

ios_base::out和ios::out之间没有区别,它们是一模一样的。

因为它们都是整形常量,而且数值一样,完全可以互相代替。

至于什么时候用哪个,我认为喜欢用哪个就用哪个,因为它们确实是一样的。

ios_base类的 I/O 流控制标志有哪些

  • std::ios_base::in:输入模式,表示以读取方式打开流。
  • std::ios_base::out:输出模式。
  • std::ios_base::app:追加模式,表示以写入方式打开流,并将数据追加到文件末尾而不清除原有内容。
  • std::ios_base::trunc:截断模式,表示以写入方式打开流,并清除文件原有内容。
  • std::ios_base::binary:二进制模式,以二进制方式打开流。
  • std::ios_base::ate:打开流后将文件指针定位到文件末尾。

ios类的 I/O 流控制标志有哪些

  • std::ios::in:输入模式,表示以读取方式打开流。
  • std::ios::out:输出模式。
  • std::ios::app:追加模式,表示以写入方式打开流,并将数据追加到文件末尾而不清除原有内容。
  • std::ios::trunc:截断模式,表示以写入方式打开流,并清除文件原有内容。
  • std::ios::binary:二进制模式,以二进制方式打开流。
  • std::ios::ate:打开流后将文件指针定位到文件末尾。

证明它们是一样的

cpp 复制代码
#include<iostream>
#include<fstream>


int main(){
	printf("ios_base::in的值:%d\n",std::ios_base::in);
	printf("ios::in的值:%d\n",std::ios::in);
	printf("-------------\n");
	
	printf("ios_base::out的值:%d\n",std::ios_base::out);
	printf("ios::out的值:%d\n",std::ios::out);
	printf("-------------\n");
	
	printf("ios_base::app的值:%d\n",std::ios_base::app);
	printf("ios::app的值:%d\n",std::ios::app);
	printf("-------------\n");
	
	printf("ios_base::trunc的值:%d\n",std::ios_base::trunc);
	printf("ios::trunc的值:%d\n",std::ios::trunc);
	printf("-------------\n");
	
	printf("ios_base::binary的值:%d\n",std::ios_base::binary);
	printf("ios::binary的值:%d\n",std::ios::binary);
	printf("-------------\n");
	
	printf("ios_base::ate的值:%d\n",std::ios_base::ate);
	printf("ios::ate的值:%d\n",std::ios::ate);
	printf("-------------\n");
	
	
}
相关推荐
朝朝辞暮i17 分钟前
C++ 第 21 课:struct —— 把一组相关数据打包在一起
开发语言·c++·算法
SHARK_pssm1 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
汉克老师2 小时前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
沫璃染墨2 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
可乐ea4 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化
朝朝辞暮i4 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
无忧.芙桃5 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法
无名猿5 小时前
std::variant 完全指南:类型安全的 union 与 std::visit 用法
c++·stl·标准库·现代c++
无名猿6 小时前
C++ 迭代器五分类与失效场景汇总:一张表避开所有 UB
c++·stl·标准库·踩坑记录
0+1116 小时前
算法 --模拟
c++·算法·leetcode