#include <iostream>
预处理
<>环境自带的文件
I o 是输入输出
源文件 有
.cpp编译文件(原码)
.sln解决方案文件
还有配置文件和项目文件
目标文件有
.obj文件把好多cpp文件合成一个汇编执行文件
.exe文件
程序生成的过程
预处理-》编译-》汇编-》链接-》执行
预处理:先是include把文件复制过来,但是还有别的说法后面会学
编译:每一个cpp是单独编译,转换成汇编语言
.cpp ->.s
汇编:把汇编语言转换成机器码 .s->.obj
链接:将多个obj设置成文件入口
执行:加载一些动态库,并执行文件
c++的注释
单行注释://
多行注释: /* */
建议在每个文件头部注释文件用途
cout输出的使用
优点:
1 支持多种输入格式多个数据合并输出
2 换行并刷新缓冲区
3 简化命名空间
什么是简化命名空间,这有个例子
cpp
#include <iostream>
//命名空间输入简化
using namespace std;
int main()
{
cout << "LYS IS NB !\n";
std::cout << "Hello World!\n";
}
这里的std有点像C语言里面的stdio.h
这就是一个标准库,而cout是这个标准库里面的一个函数
std::cout << "Hello World!\n";
这句话是说用了std里面的cout函数输出了Hello World!
但是用了 using namespace std;
意味着可以把std省略掉了
但是是不是觉得这样有点多次一举呢?
其实并不是,因为在c++的开发过程中不像C语言基本只能调用基本库,c++会调用很多第三方库,这里面难免会出现重名的函数,但是在没有出现重名问题前就可以用这个方法省略,其实感觉这个本质就是在加了一个前置延长名字了
什么是可以数出多个内容呢
cout << "马年大吉" << 2026;
就是像这样一次输入多个内容
什么是换行并刷新缓冲呢
//std::endl换行并刷新缓冲
cout << "happy new year" << endl;
对于缓冲区的理解要到后面
关于预处理补充
除了#include,预处理还包括:
-
宏定义
#define替换 -
条件编译
#ifdef、#ifndef等 -
删除注释
关于命名空间(std)的深入理解
你的理解很准确!std 是标准命名空间,类比C语言的stdio.h很贴切。让我补充一个例子说明为什么需要命名空间:
cpp
#include <iostream>
using namespace std;
// 假设这是第三方库A
namespace LibA {
void print() { cout << "LibA输出" << endl; }
}
// 假设这是第三方库B
namespace LibB {
void print() { cout << "LibB输出" << endl; }
}
int main() {
print(); // 错误!编译器不知道用哪个print
// 必须指定命名空间
LibA::print(); // 调用LibA的print
LibB::print(); // 调用LibB的print
// std::cout 同理,防止和其他库的cout冲突
return 0;
}
关于缓冲区(endl vs \n)
cout << "立即输出" << endl; // 立即显示并换行
cout << "暂存缓冲区" << "\n"; // 只换行,可能暂存缓冲区
-
endl="\n"+ 刷新缓冲区(flush) -
刷新缓冲区确保立即显示,但在频繁输出时影响性能
-
程序正常结束时自动刷新缓冲区
多内容输出原理
cout << "年龄:" << 18 << " 身高:" << 175.5;
// 本质是链式调用:(cout << "年龄:") << 18 ...
建议 :初期用using namespace std;方便学习,熟悉后建议用std::cout明确来源,养成良好代码习惯。