当前位置: 首页 > news >正文

C++ 入门核心语法|从 Hello World 到基础特性一次性吃透

文章目录

  • 前言
  • 一、C++ 第一个程序:Hello World
  • 二、命名空间 namespace
    • 1. 为什么需要命名空间?
    • 2. 命名空间定义规则
    • 3. 三种使用方式
  • 三、C++ 输入 & 输出
    • 1. 核心对象
    • 2. 最大优势
  • 四、缺省参数(默认参数)
    • 1. 定义
    • 2. 使用方式
    • 3. 声明与定义分离规则
  • 五、函数重载(C++ 重要特性)
    • 1. 定义
    • 2. 示例
    • 3. 与缺省函数某些情况矛盾
  • 六、 引用 &(C++ 最常用语法)
    • 1 定义
    • 2. 引用三大特性
    • 3. 引用的用途
    • 4. const 引用(权限问题)
    • 5. 临时对象必须用 const 引用
    • 6. 引用 vs 指针(高频面试)
  • 七、inline 内联函数(替代宏)
    • 1. 作用
    • 2. 特点
  • 八、 nullptr(C++11 空指针)
  • 1. 问题
  • 2.解决方案
  • 3. 与C的差异
  • 总结

前言

最近开始系统学习 C++,整理了一份超全的入门基础笔记,专注新手最该掌握的知识点与核心语法,适合零基础入门或快速复习,直接干货奉上~


一、C++ 第一个程序:Hello World

C++ 完全兼容 C,C程序能写过的,在C++上依旧可以通过,两种写法都能跑:

// C风格#include<stdio.h>intmain(){printf("hello world\n");return0;}// C++风格#include<iostream>usingnamespacestd;intmain(){cout<<"hello world"<<endl;return0;}

注:VS上要将后缀改为.cpp,编译器才知道是C++

二、命名空间 namespace

1. 为什么需要命名空间?

不知道大家在用C写程序的时候会不会遇到一个烦恼,就是写了程序很长的时候,一不小心就重定义了一个变量名或者函数名。而C++为了避免这种情况,引出了一个叫命名空间的概念。就是为了解决全局命名冲突、名字污染这种情况。

C 语言项目中变量 / 函数名和库函数重名是常态,会直接编译报错

#include<stdio.h>#include<stdlib.h>intrand=10;// 与库函数 rand 冲突intmain(){printf("%d\n",rand);// 编译报错return0;}

但如果使用命名空间就不会出现问题:

#include<stdio.h>#include<stdlib.h>namespacebit{intrand=10;}intmain(){printf("%d\n",bit::rand);return0;}

2. 命名空间定义规则

namespace空间名{// 可定义:变量、函数、类型intx;voidfunc(){}structNode{};}
  • namespace 只能定义在全局
  • 可以嵌套定义
  • 多个文件同名命名空间会自动合并(命名空间可以跨文件使用,不受文件限制,注意包含头文件)
  • 标准库都在 std 内(因此在调用C++标准库的时候必须使用std命名空间)

所以

#include<iostream>

在编译时展开等价于

namespacestd{//////标准库文件};

3. 三种使用方式

① 指定访问

namespacebit{inta=10;}intmain(){cout<<bit::a<<endl;}

② 展开单个成员

usingbit::a;cout<<a<<endl;

③ 展开整个空间(仅练习用)

usingnamespacebit;

项目严禁展开整个 std,极易冲突!

三、C++ 输入 & 输出

头文件:#include<iostream>

1. 核心对象

  1. cin:标准输入(键盘)
  2. cout:标准输出(屏幕)
  3. endl:换行 + 刷新缓冲区
  4. <<:流插入运算符
  5. >>:流提取运算符

2. 最大优势

与C++的输入输出的区别就是C++里面提供的输入输出可以自动识别类型,非常方便,就省去占位符。自动识别变量类型,不需要 %d、%f、%lf。

inta;doubleb;charc;cin>>a>>b>>c;cout<<a<<" "<<b<<" "<<c<<endl;

注:虽然C++的输入输出方便,但在性能上也做出了牺牲,会比C提供的输入输出更慢一点,在竞赛时可能就有超时的风险,且C++的输入输出不好像C一样去控制格式,综合来说有利也有弊。

四、缺省参数(默认参数)

1. 定义

声明函数时给参数一个默认值,调用不传参则使用默认值。

2. 使用方式

①全缺省

voidFunc(inta=10,intb=20,intc=30){cout<<a<<" "<<b<<" "<<c<<endl;}

② 半缺省(重点)

必须从右往左连续缺省,不能跳!

// 正确voidFunc(inta,intb=10,intc=20);// 错误voidFunc(inta=10,intb,intc=20);

注:调用缺省函数时只能从左向右依次给实参(和半缺省对应)

3. 声明与定义分离规则

缺省值只能写在声明里!

// Stack.hvoidSTInit(ST*ps,intn=4);// Stack.cppvoidSTInit(ST*ps,intn){// ...}

五、函数重载(C++ 重要特性)

1. 定义

同一作用域:函数名相同,参数不同 → 构成重载

参数不同指:

  1. 类型不同
  2. 个数不同
  3. 类型顺序不同

返回值不同不能构成重载!

2. 示例

// 1. 类型不同intAdd(inta,intb);doubleAdd(doublea,doubleb);// 2. 个数不同voidf();voidf(inta);// 3. 顺序不同voidf(inta,charb);voidf(charb,inta);

3. 与缺省函数某些情况矛盾

#include<iostream>using namespace std;voidf1(){cout<<"f()"<<endl;}voidf1(inta=10){cout<<"f(int a)"<<endl;}intmain(){f1();// f()调⽤时,会报错,存在歧义,编译器不知道调⽤谁return0;}

解决方法:将两个放在不同的命名空间中,但放在不同的命名空间中就不是函数重载了

#include<iostream>using namespace std;namespace kind{voidf1(){cout<<"f()"<<endl;}};voidf1(inta=10){cout<<"f(int a)"<<endl;}intmain(){kind::f1();return0;}

六、 引用 &(C++ 最常用语法)

1 定义

引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同⼀块内存空间。比如:水壶传中李逵,宋江叫"铁牛",江湖上人称"黑旋风";林冲,外号豹子头;

引用是变量的别名,不开辟新空间,和原变量共用同一块内存。(底层还是使用指针实现,但语法层面默认不开空间)

语法:

类型&别名=实体;

示例:

inta=10;int&b=a;int&c=b;// 多级别名

2. 引用三大特性

  1. 定义时必须初始化
  2. 一个变量可以有多个引用(一个人可以有多个小名)
  3. 一旦绑定,不能改变指向
inta=10;int&b=a;intc=20;b=c;// 这是赋值,不是修改引用指向!

3. 引用的用途

① 引用传参(替代指针)

voidSwap(int&rx,int&ry){inttmp=rx;rx=ry;ry=tmp;}

② 引用返回值(减少拷贝)

int&STTop(ST&rs){returnrs.a[rs.top];}

可以直接修改返回值:STTop(st) += 10;

可以理解为:

  • 返回值就是返回一个常量数值,不能修改原变量。
  • 返回引用就是返回原变量,可以修改原变量。

注:不能返回局部变量的引用,会变成类似空指针的东西

4. const 引用(权限问题)

  • 权限可以缩小
  • 权限不能放大
constinta=10;// int& ra = a; // 错误:权限放大constint&ra=a;// 正确intb=20;constint&rb=b;// 正确:权限缩小


注:int&这种形式就代表可读可写,const int&这种代表只读不写

5. 临时对象必须用 const 引用

  • 常量,表达式,类型转换的结果会保存在⼀个临时对象中,⽽C++规定临时对象具有常性,所以这里就触发了权限放⼤,必须要⽤常引⽤才可以。
  • 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,C++中把这个未命名对象叫做临时对象
constint&r=10;constint&r=a*3;constint&r=12.34;

6. 引用 vs 指针(高频面试)

  1. 语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
  2. 引用必须初始化,指针不用
  3. 引用不能改变指向,指针可以
  4. 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
  5. 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些
  6. sizeof(引用) = 类型大小;sizeof(指针) = 4/8 字节

七、inline 内联函数(替代宏)

1. 作用

替代 C 语言宏函数,编译时在调用处展开,无栈帧开销,提高高频小函数效率。

inlineintAdd(intx,inty){returnx+y;}

2. 特点

  • inline 是编译器建议,不是强制
  • 递归函数、代码长函数会被忽略
  • 声明与定义不能分离,否则链接错误

八、 nullptr(C++11 空指针)

1. 问题

C++ 中 NULL 是 0,重载函数会调用错误版本。

voidf(intx){cout<<"int"<<endl;}voidf(int*ptr){cout<<"int*"<<endl;}f(NULL);// 调用 f(int),错误

2.解决方案

使用 nullptr,专门表示空指针。

f(nullptr);// 调用 f(int*),正确

3. 与C的差异

#include<iostream>usingnamespacestd;intmain(){inta=0;double*s=&a;return0;}

上述代码在C中能通过,但在C++不能因为C++存在严格的类型判定,连指针都要类型一致(C中指针会发生隐式转换)
C++中nullptr它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问提·。所以在C++中都要将NULL改为nullptr。

总结:

  1. C++中nullptr可以给予任意指针。
  2. void * 依旧可以接受任意指针。
  3. C++中有严格的类型判定。

总结

  1. namespace 解决命名冲突,项目用 域::成员
  2. cin/cout 自动识别类型
  3. 缺省参数从右往左连续给,声明给缺省值
  4. 函数重载看参数,不看返回值
  5. 引用是别名,常用来传参、返回值,权限可缩不可放
  6. inline 替代宏,短小高频函数使用
  7. C++11 空指针统一用 nullptr

以上就是该篇博客的内容了,如果内容存在不足,请大佬多多包涵并不吝赐教,会在写出优秀好文的路上努力拼搏达,感谢支持!!!
一键三连。1感谢佬们的支持😄


  1. 点赞,关注,收藏qwq感谢佬佬们↩︎

http://www.jsqmd.com/news/799994/

相关文章:

  • HIOKI-3272 日置 3272 电源 用于3273-50 3274 3275 3276探头
  • LocalChat:零门槛本地部署开源大语言模型,实现隐私安全的离线AI对话
  • 别再花钱买Token了!手把手教你免费申请Wechaty Token,15天体验版保姆级教程
  • 从Excel舍入到IEEE754:你的财务计算和游戏物理引擎可能都错了
  • 电力管供应商/热浸塑电力管厂家哪家靠谱?2026年热浸塑钢管厂家推荐:福派安领衔,口碑好的热浸塑电缆保护管厂家优质盘点 - 栗子测评
  • 收藏!小白程序员必看:LLM推理延迟的“快慢”真相与优化秘籍
  • 2026年4月做得好的网架直销厂家口碑推荐,国内网架口碑推荐,结构稳固,网架承载能力超强大 - 品牌推荐师
  • 2025届必备的五大AI学术工具解析与推荐
  • 为什么你的Perplexity Science搜索总错过最新预印本?——基于arXiv/medRxiv/SSRN实时源的3层校验机制(含Python自动化脚本)
  • BUUCTF实战:从加密流量到明文Flag——[DDCTF2018]流量分析全解析
  • IP6546_FB 3A 输出电流的高效同步降压 DCDC
  • ARM GICD_ITARGETSR寄存器解析与多核中断分发
  • OpenClaw智能体安全防护实战:ClawKeeper三层纵深防御架构解析
  • 2026花岗岩透水板厂家推荐:陶瓷透水砖厂家实力榜单推荐-设计感与品质兼具 - 栗子测评
  • 3D-DRAM加速器技术与LLM推理优化解析
  • 实战指南:利用Delly与bcftools进行肿瘤样本SV变异检测与解读
  • MetaGPT:多智能体协作框架的设计原理与工程实践
  • 高超音速武器技术解析:从超燃冲压发动机到战略稳定性挑战
  • 嵌入式高手进阶:手把手教你用IAR icf文件将关键代码段搬到RAM里跑
  • Notate:一体化本地AI聊天与知识库工具,实现私有化RAG与多模型协作
  • 2026陶板/陶砖定制厂家有哪些?靠谱设计感异形陶板/陶土板生产厂家推荐 - 栗子测评
  • STM32 低功耗停机模式(STOP)中断唤醒实战:从基础配置到抗干扰优化
  • OceanBase安装配置全攻略
  • 2026年4月市面上正规的防爆烘箱供应厂家推荐,正规的防爆烘箱供应商怎么选 - 品牌推荐师
  • SAP-BTP :(4)RAP-创建CDS DATA模型映射和拓展
  • Unlock Music终极指南:5分钟解决加密音乐播放难题,实现跨平台音乐自由
  • 基于MCP的AI智能体:用自然语言轻松管理TikTok广告投放
  • 2026届毕业生推荐的六大AI学术平台推荐
  • EDA与IP生态演进:从ESL综合到先进封装,2013年行业转折点深度解析
  • C语言核心知识体系总结