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

从 Hello Word!立刻开始


4个 Code Block,快速掌握 C++ 基础程序结构、std 命名空间规范用法、输出格式控制、内联函数优化原理、函数重载规则与避坑。

AI 能解决绝大部分的问题,因此笔记只记述重要的内容,这些内容串联起来形成一个网络骨架。你可以从笔记中快速获取关键的信息,解决疑问,也可以作为练习的实例。 直接开始编程调试,在那之前,请使用 AI 引导自己完成环境准备,你只需要告诉 AI:

我要使用 Visual Studio 社区版调试第一个 C++ 程序,请给我傻瓜式的部署与使用教程!


Code 1

c 复制代码
#include <iostream>
int main()
{
    std::cout << "Hello World!\n"<<endl;
    // cout<< 输出流; endl 换行; cin>> 输入流; 
     // \n 换行符; // 注释符; " " 字符串;
     return 0;
}
c 复制代码
#include <iostream>
using namespace std;
int main()
{
    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

arduino 复制代码
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
    cout << "Hello" << setw(10) << "World!\n";
    // setw(10) 顾名思义 Set Wide设置宽度10
    return 0;
}

Code 3

c 复制代码
#include <iostream>
using namespace std;
inline void printw() { cout << "World!\n"; };
// 提前声明了内联函数 去除inline则是一般的情况
int main()
{
    cout << "Hello" ;
    printw();
    // 相当于写入 cout << "World!\n"; 而不是一般调用
    return 0;
}

内联函数的原理

在这里插入图片描述

函数调用通常采取右边的方式,需要额外的时间,如果使用inline声明,就相当于把被调用者写进了调用者的函数体,调用者的代码量增加了,实时存储占用增加,执行时间缩短。


Code 4

什么是函数重载?

在同一个作用域里,可以定义多个函数名相同,但参数列表不同的函数,编译器会根据调用时传入的参数个数、类型、顺序,自动匹配到对应的函数。

同一个操作,需要支持不同类型 / 个数 / 顺序的参数时。比如: printf(6)printf(6.66)printf("6,6.66")


c 复制代码
#include <iostream>
// 重载 1:两个 int 参数
int func(int x, int y)
{
    return x + y;
}

// 重载 2:一个 int 参数
int func(int x)
{
    return x * x;
}

// 重载 3:两个 double 参数
double func(double x, double y)
{
    return x + y;
}

int main()
{
    std::cout << func(3, 5) << std::endl;   // 调用第1个:3+5=8
    std::cout << func(3) << std::endl;      // 调用第2个:3*3=9
    std::cout << func(1.5, 2.5) << std::endl; // 调用第3个:1.5+2.5=4.0
    return 0;
}

重载的判断标准 只看参数列表

条件 是否构成重载 说明
参数个数不同 ✅ 是 比如 func(int)func(int, int)
参数类型不同 ✅ 是 比如 func(int, int)func(double, double)
参数顺序不同 ✅ 是 比如 func(int, double)func(double, int)
仅返回值不同 ❌ 不是 int func(int)double func(int) 会报错!

重载常见坑

  • 不能只靠返回值区分
go 复制代码
int func(int x); 
double func(int x); // 错误!
  • const 引用和普通引用的区别
arduino 复制代码
void func(int& x); 
void func(const int& x); // 可重载
  • 默认参数可能导致歧义
arduino 复制代码
void func(int x, int y = 0); 
void func(int x); 
// 调用 func(5); 因为已经给定了y=0,编译器发现大家都只要1个可传参 x,无法区分
相关推荐
zh路西法3 小时前
【玩转VLA具身智能机械臂】(三):视觉避障——从 RGB-D 点云到 MoveIt octomap 的完整落地
c++·ros2·gazebo·moveit2·ompl·octomap
2601_956121974 小时前
线性DP(入门)
c++·算法·动态规划
彷徨而立4 小时前
【C/C++】多线程读写普通 int 变量的一些问题
java·c语言·c++
蒸蒸yyyyzwd4 小时前
cpp web server 面试可能问题总结
c++·笔记·八股
啊啊啊啊啊!!!!4 小时前
【c++】map和set的使用
开发语言·c++
小灰灰搞电子5 小时前
分享自己写的一个通信协议源码,支持C++和C,双包头+不定长
c语言·开发语言·c++
Brilliantwxx5 小时前
【C++】初入嵌入式C++复习-----经典面试题100道
开发语言·c++·算法·面试·职场和发展
汉克老师5 小时前
CSP-J 初赛(以满分为目标):第十六课 《STL容器与常见数据结构——C++自带的“数据结构工具箱”》
c++·csp-j·小学生·学c++编程
luj_17685 小时前
断舍离中的项目管理智慧
c语言·开发语言·c++·经验分享·算法
FFZero15 小时前
[mpv架构] (三) mpv 怎么实现 MP4 秒开?
c++·音视频·mpv