C++ 第一课 从 Hello Word!立刻开始
从 Hello Word!立刻开始

4个 Code Block,快速掌握 C++ 基础程序结构、std 命名空间规范用法、输出格式控制、内联函数优化原理、函数重载规则与避坑。
AI 能解决绝大部分的问题,因此笔记只记述重要的内容,这些内容串联起来形成一个网络骨架。你可以从笔记中快速获取关键的信息,解决疑问,也可以作为练习的实例。 直接开始编程调试,在那之前,请使用 AI 引导自己完成环境准备,你只需要告诉 AI:
我要使用 Visual Studio 社区版调试第一个 C++ 程序,请给我傻瓜式的部署与使用教程!
Code 1
#include<iostream>intmain(){std::cout << "Hello World!\n"<<endl;// cout<< 输出流; endl 换行; cin>> 输入流;// \n 换行符; // 注释符; " " 字符串;return 0;}
#include<iostream>using namespace std;intmain(){cout << "Hello World!\n"<<endl;return 0;}
看到差异了吗? std 是一个命名空间,就像一个箱子。全局提前声明 using namespace std 意味着把箱子翻开了,局内各个函数体可以直接使用箱子里的cin、cout、endl这些函数,比如在main函数里面使用。不过,有时候这并非好事,感兴趣就去问问AI吧。
-
cin/cout,是 c+in/c+out 的组合,直观。 std
是存放 C++ 标准功能的命名空间 std::
表示 “使用 std 里面的东西” using namespace std;
方便但不安全,要避免函数名冲突 -
规范写法: std::cout -
有的编辑器/编译器 main 函数不写 return 0;也不会有事,比如新版的 Visual Studio
程序编译原理



Code 2
#include<iostream>#include<iomanip>using namespace std;intmain(){cout << "Hello" << setw(10) << "World!\n";// setw(10) 顾名思义 Set Wide设置宽度10return 0;}
Code 3
#include<iostream>using namespace std;inlinevoidprintw(){ cout << "World!\n"; };// 提前声明了内联函数 去除inline则是一般的情况intmain(){cout << "Hello" ;printw();// 相当于写入 cout << "World!\n"; 而不是一般调用return 0;}
内联函数的原理
在这里插入图片描述
函数调用通常采取右边的方式,需要额外的时间,如果使用inline声明,就相当于把被调用者写进了调用者的函数体,调用者的代码量增加了,实时存储占用增加,执行时间缩短。
Code 4
什么是函数重载?
在同一个作用域里,可以定义多个函数名相同,但参数列表不同的函数,编译器会根据调用时传入的参数个数、类型、顺序,自动匹配到对应的函数。
同一个操作,需要支持不同类型 / 个数 / 顺序的参数时。比如:printf(6)、printf(6.66)、printf("6,6.66")
#include<iostream>// 重载 1:两个 int 参数intfunc(int x, int y){return x + y;}// 重载 2:一个 int 参数intfunc(int x){return x * x;}// 重载 3:两个 double 参数doublefunc(double x, double y){return x + y;}intmain(){std::cout << func(3, 5) << std::endl; // 调用第1个:3+5=8std::cout << func(3) << std::endl; // 调用第2个:3*3=9std::cout << func(1.5, 2.5) << std::endl; // 调用第3个:1.5+2.5=4.0return 0;}
重载的判断标准 只看参数列表
|
|
|
|
|---|---|---|
|
|
|
func(int) 和 func(int, int) |
|
|
|
func(int, int) 和 func(double, double) |
|
|
|
func(int, double) 和 func(double, int) |
|
|
|
int func(int)
double func(int) 会报错! |
重载常见坑
-
不能只靠返回值区分
int func(int x);double func(int x); // 错误!
const
引用和普通引用的区别
voidfunc(int& x);voidfunc(constint& x); // 可重载
-
默认参数可能导致歧义
voidfunc(int x, int y = 0);voidfunc(int x);// 调用 func(5); 因为已经给定了y=0,编译器发现大家都只要1个可传参 x,无法区分
夜雨聆风