1. C++输入输出:从Hello World开始
作为一名从C语言转战C++的老程序员,我至今还记得第一次看到C++版Hello World时的困惑。为什么不用printf了?那些奇怪的<<符号是什么?让我们从最基础的开始,彻底搞懂C++的输入输出系统。
C++使用iostream库来处理输入输出,核心是四个对象:
- cin:标准输入(对应键盘)
- cout:标准输出(对应屏幕)
- cerr:标准错误输出
- clog:标准日志输出
最经典的Hello World在C++中是这样写的:
cpp复制#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
这里有几个关键点需要注意:
#include <iostream>是必须的头文件,没有它编译器会报错std::cout中的std是命名空间(后面会详细讲解)<<是流插入运算符,可以理解为"把右边的数据塞到左边的流里"std::endl不仅插入换行,还会刷新输出缓冲区
新手常见错误:忘记写std::前缀,或者把<<写成>>。后者是流提取运算符,用于输入而非输出。
与C语言的printf相比,cout有这些优势:
- 类型安全:不需要%d、%s这样的格式说明符
- 可扩展:可以重载<<运算符来输出自定义类型
- 链式调用:可以连续使用<<输出多个内容
比如输出一个整数和字符串的组合:
cpp复制int age = 25;
std::cout << "I am " << age << " years old." << std::endl;
2. 命名空间:解决命名冲突的利器
2.1 为什么需要命名空间
在大型C++项目中,命名冲突是个令人头疼的问题。想象一下,你和同事分别开发不同的模块,都定义了一个叫calculate()的函数,当这两个模块被整合到一起时,编译器就不知道该用哪个版本了。
C语言的解决方案通常是加前缀,比如module1_calculate()和module2_calculate()。这种方式可行但笨拙,而且名字会变得很长。
C
