零、C++基本语法

【C++】使用 yaml-cpp 库操作 YAML 配置文件有利于我们灵活配置工程,解决大量重复劳动,也方便调试。YAML 是一种人类可读的数据序列化格式,它使用缩进和特定的符号来表示数据结构。在本文中,我们将详细介绍如何在 C++ 中使用yaml-cpp库来解析和生成 YAML 格式的数据。 阅读详情

命名空间

功能:

解决符号名称冲突的方法

语法:

namespace <命名空间名称>
{
	//代码
}

使用:

局部引用:

	 **&lt;命名空间名字&gt; :: &lt;函数名/变量名/类名&gt;**

全部引用:

	引用整个命名空间的内容:	

		**using namespace &lt;命名空间的名字&gt;;**      

	引用命名空间内单个元素符号:	

		**using &lt;命名空间的名字&gt; :: &lt;命名空间内元素符号&gt;**
::
域操作符,用于访问作用域
#include <iostream>

using namespace std;

namespace mySpace
{
	int a = 10;
}

int main()
{
	int a = 20;
	cout << "a = " << a << endl; //20
	cout << "mySpace::a = " << mySpace::a << endl; //10
	return 0;
}

命名空间取别名:

一个命名空间可以取多个别名,使用别名和原名无任何区别
namespace mySpace
{
	int a;
}

namespace mySpace2 = mySpce;

匿名命名空间:

定义自己的命名空间时不需要取名字,可以直接使用里面的函数或者变量,但只在当前文件内生效

#include <iostream>

namespace mySpace
{
	int a = 10;
}
namespace
{
	int a = 50;
}

int main()
{
	cout << "a = " << a << endl; //50
	cout << "mySpace::a = " << mySpace::a << endl; //10
	return 0;
}

using:

功能一:

	using namespace 将一个命名空间中的所有名词导入到当前作用域中,从而可以直接使用该命名空间中的所有名称吗,而不必使用作用域解析运算符(::)
#include <iostream>

namespace mySpace
{
	int a = 10;
}

int main()
{
	using namespace mySpace;
	cout << "a = " << a << endl; //10
	return 0;
}

功能二:

	**定义别名**

**using INT = int**   <==> tyepdef int INT;

C++输入输出

C++中输入输出通过流的方式来实现

流运算符:
 **&lt;&lt;**  输出运算符

 **&gt;&gt;**  输入运算符
定义:
//cin = control-in

cin  标准输入对象:

	输入类型不匹配会返回空

	消除了scanf连续输入多次字符时产生垃圾字符的缺点

//cout = control-out

cout 标准输出对象

	设置域宽:cout.width(5),设置域宽为5

	cout输出顺序从左往右,运算顺序从右往左(右边的先算,最后打印)

endl 换行操作
设置域宽:
cout.width(5),设置域宽为5
标准设置:
oct 八进制

hex 十六进制

dec 十进制

showbase 显示前缀
使用cin和cout注意点:
需要包含iostreanm头文件

引用标准命名空间std
#include <iostream>

using namespace std;


int main(int argc, const char *argv[])
{
    int a = 0, b = 0;

    cin >> a >> b;

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    //cout.width(5);
    cout << showbase;
    cout << oct;
    cout << "a = " << a << endl;

    cout << hex;
    cout << "a = " << a << endl;
  
    cout << dec;
    cout << "a = " << a << endl;
	return 0;
}

cout的执行顺序和输出顺序

cout执行顺序:从右往左执行

cout输出顺序:从左往右执行

C++函数

带默认值的函数

定义:

C++中存在带默认值的函数,即使不传参也会按默认值参数运行

规则:

1、需要添加默认值的参数直接在参数栏中用等号赋值即可

2、可以所有参数都存在默认值,也可以部分参数设为默认值

3、**只有部分参数有默认值时,带默认值的参数必须放在参数栏末尾**

4、实参和形参的传参是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提

5、**默认参数只需要在声明或定义时说明,不需要两者都说明**

带占位参数的函数

定义:

C++中的函数的参数列表可以有占位参数,用来占位,调用函数时必须填补该位置

规则:

只写类型不写变量名

若无默认值参数,则调用时必须填补

若有默认值参数,则调用时可以不用填补
#include <iostream>

using namespace std;

//show_fun_1是带默认值的参数
//参数c的默认值是100
void show_fun_1(int a, int b, int c = 100);

void show_fun_1(int a, int b, int c)
{
    cout << a << endl << b << endl 
        << c << endl;
}

//show_fun_2是带占位符的函数
//如果没默认值,需要传递第三个参数
//有默认值,不需要传递第三个参数
void show_fun_2(int a, int b, int)
{
    cout << a << endl << b << endl;
}

int main(int argc, char const *argv[])
{
    int data1 = 10, data2 = 20;
    show_fun_1(data1, data2);
    show_fun_2(data1, data2, 300);

    return 0;
}

函数的重载

定义:

在同一作用域内,参数列表不同,函数名相同的函数。

虽然函数名相同,但函数所在内存位置不同,本质上还是不同函数

规则:

1、函数名称必须相同

2、参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)

3、函数的返回类型可以相同也可以不相同

4、仅仅返回类型不同不足以成为函数的重载的依据

原理:

在编译阶段函数会被重新命名,根据函数名、参数列表来决定,比如void Swap(int &a, int &b)在编译阶段的名称为_Swap_int_int

注意事项:

避免与带有默认值的函数进行重载

C++引用

左值:可以取地址的值

右值:不可以取地址的值

int a = 10;
a  ---> 左值
&a ---> 右值

左值的引用:

定义:(取别名)

引用变量是一个别名,也就是说,它是某个已存变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量

引用和指针的区别:

1、不存在空引用。引用必须连接到一块合法的内存

2、一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象

3、引用必须在创建时被初始化。指针可以在任何时间被初始化

规则:

<类型>&<引用名> = 目标名

引用必须在创建时被初始化,且初始化后不可以指向其他目标名(**const**)

引用类型必须与目标类型一致

不能将已有的引用名作为其他变量或对象的名字或别名

原理:

使用引用时编译器会在底层生产一个指针,并进行*运算

本质时指针常量的使用**int *const p**
const int * const p = &a;
顶层const --> p
底层const --> *p

用法:

函数传参:

函数返回值:返回的数据不可为局部变量
#include <iostream>

using namespace std;

int &Swap(int &a, int &b)
{
    static int sum = a + b;
    int temp = a;
    a = b;
    b = temp;

    return sum;
}

int main(int argc, const char *argv[])
{
    int a, b;

    cin >> a >> b;
    Swap(a, b);
    cout << "a : " << a << endl
        << "b : " << b << endl;

    int &ret = Swap(a, b);
    cout << "ret : " << ret << endl;

	return 0;
}

对数组引用:
int arr[5] = {1, 2, 3, 4, 5};
int (&refArr)[5] = arr;
refArr[0] = 6;
cout << "arr[0] : " << arr[0] << endl;
对指针引用:
int num = 100;
int *ptr = &num;
int *&refPtr = ptr;

*refPtr = 200;
cout << "num : " << num << endl;

右值引用:

定义:

右值引用必须立即进行初始化操作,且只能使用右值进行初始化,当其被初始化过后,在当前作用域内被定义为左值

int a = 3;
int &&b = 3;
b = 100;

函数的重载

定义:

在同一个作用域内,参数列表不用,函数名相同的函数

虽然函数名相同,但函数所在内存位置不同,本质上还是不同函数

规则:

1、函数名必须相同

2、参数列表必须不同(个数不同,类型不同,参数排队不同等)

3、函数的返回类型可以相同也可以不相同

4、仅仅返回类型不同不足以成为函数的重载的依据

原理:

//反编译
g++ -S xx.cpp
在xx.s文件中找 .type

注意点:

避免与带有默认值的函数进行重载

nullptr :替代NULL,能够隐式转换成任何指针或成员指针的类型,也能和他们进行相等或者不等的比较 ---> c++11新特性

NULL存在问题:

 (void *)0  &lt;==&gt; NULL
万能引用既可以接收左值由可以接收右值
左值引用只能接收左值,如果要接收右值必须使用常量左值引用
右值引用只能接收右值

new和delete

是操作符,不需要()

new:申请一个对象

delete:销毁一个对象

#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
    int *pa = new int(100);
    int *parray = new int [5]{1, 2, 3, 4, 5};
    cout << *pa << endl;
    int *pb = new int (200);
    cout << *pb << endl;
    cout << *pb << endl;
    cout << parray[1] << endl;

    delete pb;
    delete pa;
    pa = NULL;
    pb = NULL;
    delete parray;

    return 0;
}

new delete 和 malloc free区别

1、new/delete的实现是基于malloc/free

2、malloc/free是C/C++标准库函数,new/delete是C++操作符

3、malloc/free需要手动计算类型大小,且返回void*,new/delete可以自己计算类型大小,根据类型返回相应的类型的指针

4、malloc/free只负责分配/释放空间,new/delete会调用构造函数与析构函数,用于初始化对象与销毁对象

5、它们都是动态管理内存的入口,堆是一块具体区域内存,而自由存量区是一个抽象概念

列表初始化(c11新特性)

功能:
主要用于统一初始化语法

初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,以一个新值替代

顶层const和底层const

顶层const:表示指针本身是一个常量

底层const:表示指针所指的对象是一个常量

C++ 基本语法介绍 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 阅读详情

相关推荐

COMSOL新手必看:手把手教你搭建锂电池P2D模型(附完整参数设置)

本文为COMSOL新手提供了搭建锂电池P2D仿真模型的详细指南。文章从模型原理入手,逐步讲解软件设置、几何构建、关键参数配置及后处理分析,并探讨了如何将仿真结果与智能电池管理中的SOC、SOH估算相结合,为电池性能分析和BMS算法开发提供实用洞见。

transformer2023的博客 232

C++的一些基础语法

域作用限定符,namespace,缺省,流插入流提取,函数重载,指针和引用,inline,auto,范围for,nullptr

2301_79698419的博客 1万+

涨薪技术|Kubernetes(k8s)环境部署实战

这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json:​​​​​​​。安装完成后,可以使用以下命令来查看dashboard访问的端口号​​​​​​​。网络插件CNI也是以容器的方式进行启动​​​​​​​。安装完成后可以检查是否拉取了对应的容器​​​​​​​。再使用以下命令进行安装:​​​​​​​。打开后输入以下内容:​​​​​​​。安装1.19.0版本​​​​​​​。修改IP地址:​​​​​​​。

m0_60889254的博客 1084

C++编程基本语法有哪些?C++编程基本语法介绍

C++编程语言以其丰富的语法结构和强大的功能而著称,为开发者提供了构建高效、可靠软件的工具。如果希望在源程序中有两个连续的问号,且不希望被预处理器替换,这种情况出现在字符常量、字符串字面值或者是程序注释中,可选办法是用字符串的自动连接:"...?空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。在 C++ 中,分号是语句结束符。

2401_88984449的博客 5050

树莓派教程(基于python编程)--入门篇

一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 http://downloads.raspberrypi.org/raspbian_latest 三:烧录SD卡 使用Win32DiskImager将镜像烧录到格式化后的SD卡 SD卡盘根目录(/boot)下新建一个命名为ssh的...

qq_42109746的博客 6万+

NE564锁相环FM解调电路设计:10.7MHz中频实测与3种失真优化方案

本文详细解析了NE564锁相环在10.7MHz中频FM解调电路中的设计与优化方案。通过分析锁相环技术基础、电路架构设计及典型失真问题,提供了3种有效的失真优化方法,包括限幅增强、VCO频偏补偿和环路滤波优化,显著提升解调性能。文章还涵盖了PCB布局要点和系统测试验证,为高频电子线路设计提供实用参考。

weixin_33314040的博客 349

【C++基础篇】—— 基本语法(数组、函数、指针、结构体等使用语法和注意事项详解)

在本篇文章中,主要是对C++的基础语法进行回顾学习,回顾学习C++的基本语法规则、数据类型、控制结构以及面向对象编程的基本思想。

2401_82458959的博客 4985

Python3 ACM模式输入输出全攻略:从牛客网到华为机试的实战技巧

本文详细解析了Python3在ACM模式下的输入输出处理技巧,针对牛客网、华为机试等在线评测系统。文章从input()函数本质出发,总结了六种高频输入模式的处理模板,并提供了链表、二叉树等数据结构的I/O实战方案,最后给出性能优化与常见避坑指南,帮助开发者高效应对算法笔试。

zero1的博客 997

C++ 基础语法详解

函数声明指定了函数的返回类型、函数名和参数列表。函数定义包括函数体,即函数的具体实现。// 函数声明// 函数定义// 主函数// 调用add函数return 0;通过本文的详细讲解,我们介绍了C++中的基础语法,包括数据类型、变量声明、输入输出、控制结构以及函数的使用。掌握这些基础知识是学习C++编程的第一步。希望这些内容能够帮助你打下扎实的基础,顺利进入C++编程的世界。祝你学习愉快!

2302_81718051的博客 1570

【专栏必读】王道考研408数据结构+算法设计与分析万字笔记使用说明及章节导航

各位老铁思维导图在我整理完笔记后会放上去的,我需要根据王道的思维导图重新再做一遍 文章目录一:有关注意事项二:关于专栏三:学习建议四:各专栏导航(各位老铁别催,质量优先)(1)第一章:绪论(2)第二章:线性表(3)第三章:栈和队列第四章:串第五章:二叉树第六章:图 首先感谢王道大大(手动比心),很用心在做了,大家可以看其中两节是否符合胃口 (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序) (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转 一:有.

快乐江湖的博客 5万+

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 304

C++入门知识点总结——基本语法

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 1.面向对象程序设计: C++ 完全支持面向对象,包括面向对象开发的四大特性: 封装 抽象 继承 多态 C++标准库的组成: 核心语言,提供了所有构件块,包括变量、数据类型和常量等; C++ 标准库,提供了大量的函数,用于操作文件、字符串等; 标准模板库(STL),提供了大量的方法,用于操作数据结构等。 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互:

wangyongyao1989的博客 2987

第八届传智杯WPS智能办公能力挑战赛练习题库

本文是关于WPS Office软件操作知识的选择题汇总,内容涵盖WPS文字、表格和演示三大组件的常用功能。主要包括:云文档协同编辑、文本框插入、幻灯片打印设置、数据排序与筛选、函数应用(如SUMIF、COUNT)、动画效果设置、格式刷使用、页眉页脚设置、单元格引用类型等基础操作要点。同时涉及计算机基础概念如二进制、ROM存储器等。题目以单选和多选形式呈现,附带详细答案解析,全面检验用户对WPS办公软件的功能掌握程度和实际操作能力,适用于办公软件技能培训和水平测试。

qq_73044452的博客 1423

【异常基本】C/C++遍历数组

因为是主修JAVA的,C++大一学完基础知识就几乎不用了,惭愧 最近修改C代码要加写一个简单的遍历数组,还傻傻的写for(int i=0;....;....); 哈哈 自己MARK一下 [code="java"] int arr1[] = {1,2,3,4,5,6}; int i = 0; for(i=0;i...

xasd23的博客 173

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CPP基本语法笔记

cpp语法汇总整理,从零基础开始起步(还将更新)

m0_63596031的博客 5940

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++ 基本语法

bilibili黑马C++视频笔记

weixin_44095857的博客 4222

「C++系列」C++ 基本语法

C++程序结构涵盖了程序流程结构、文件结构、编译预处理命令、命名空间和标准库等多个方面。在 C++ 中,标识符是用于标识变量、函数、类、对象、类型别名等实体的名称。C++标准库提供了大量的类和函数,用于执行各种常见的任务,如输入/输出、字符串处理、容器和算法等。C++ 是一种强大的编程语言,它支持多种编程范式,包括面向过程、面向对象和泛型编程。C++ 支持多种运算符,如算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。在 C++ 中,你可以定义自己的函数,并在需要时调用它们。

日常笔记/总结/系列知识梳理 2813

C++基本语法

这里写自定义目录标题 c++基本语法 1.c++中可以用endl来代替以前C语言中的\n。 2.c++中基本的头文件是#include using namespace std; 3.#include using namespace std; int main() { cout << “Hello, world!” << endl; return 0; } c++中h...

xiaotou13的博客 8923

从零到壹搞懂C++基础语法

带大家10分钟快速过一遍C++的基础语法,会从发展历程开始介绍,包括各个版本的特性,基本语法,数组、字符串、函数的使用。

一个非常Cool的人 2224

Cppfront与Cpp2语法:探索C++的简洁安全新范式

Cppfront是一个实验性编译器项目,旨在为C++提供全新的语法形式(称为Cpp2或"C++语法2"),同时保持与现有C++生态系统的完全兼容。该项目由著名C++专家Herb Sutter发起,其核心理念是通过语法层面的创新,使C++代码编写变得更简单、更安全。 ## Cpp2语法特性解析 ### 设计哲学 Cpp2并非要创建一门全新的编程语言,而是作为C++的"另一种语法皮肤"。它保留了...

gitblog_01066的博客 610

CPP——入门基本概念与语法

因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。在以上代码中,如果count函数结束,栈帧销毁,没有清理栈帧,ret的值侥幸正确;3、参数类型顺序不同。

ccf3699f的博客 1856

cpp基本语法

命名空间没展开命名空间展开。

2203_76061586的博客 724
上一篇: 三、C++面向对象-多态(Polymorphism)
下一篇: 四、C++ - 泛型编程
木子21
博客等级 码龄9年 58粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值