c++基础语法

c++基础语法

c++的关键字

asm 、do 、if、 return、 try、 continue、 auto、 double、 inline、 short、 typedef、 for、 bool、 dynamic_cast、 int、 signed 、typeid、 public、 break 、else 、long 、sizeof 、typename 、throw、 case、 enum 、mutable、 static、 union、 wchar_t、 catch、 explicit、 namespace、 static_cast、 unsigned 、default、char 、export、 new、 struct 、using 、friend、 class、 extern、 operator、 switch、 virtual、 register、 const、 false 、private、 template、 void、 true、 const_cast、 float 、protected、 this 、volatile、 while 、delete 、goto、 reinterpret_cast

命名空间

背景

在多人协作、共同开发项目时,很容易出现撞名称的问题,为了解决这一问题,c++中便添加了命名空间这一概念。

出错案例

这里的rand变量与stdlib.h中的rand函数发生冲突,导致程序无法正常运行。

命名空间的定义

上面介绍了命名空间出现的背景,那么该怎么使用命名空间呢?

  • namespace 命名空间名字 再配合{}将我们想要放入命名空间的变量、函数、结构之类的包含起来
namespace test
{
 int rand = 1;
}

这样我们的程序就不会报错了

命名空间要注意的点

  1. 命名空间是可以嵌套的
namespace test
{
 int rand = 1;
 namespace test1
 {
  int a = 0;
 }
}
  1. 同一个工程中,可以同时出现多个相同名字的命名空间,编译器会自动将他们合并
#include<iostream>
#include<stdlib.h>


namespace test
{
 int rand = 1;
 namespace test1
 {
  int a = 0;
 }
}

namespace test
{
 int b = 1;
}
int main()
{
 printf("%d"test::b);
 return 0;
}

命名空间的使用

命名空间的使用分为3种

  • 加命名空间名及作用域限定符
printf("%d"test::b);
  • 使用using将命名空间某个成员引入
using test::b;
//
int main()
{
 printf("%d", b);
 return 0;
}
  • 使用using namespace 空间名称引入
using namespace test;
//
int main()
{
 printf("%d",b);
 return 0;
}

c++的输入和输出

学过c语言的同学都知道怎么用c语言打出hello world,那么怎么用c++和世界问号呢?

  • 简单的c++程序

#include<iostream>
using namespace std;

int main()
{
 cout << "hello world" << endl;
 return 0;
}

注意事项

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。

缺省参数

概念

  • 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

示例

#include<iostream>
using namespace std;

void fun(int a = 5)
{
 cout << a << endl;
}
int main()
{
 fun();
 fun(10);
 return 0;
}

可以看见,当我们不传参的时候,a是默认值,传参后就变成了参数值

注意事项

  • 定义和声明中只有一个能有缺省参数,一般是声明中使用,这是防止声明中的缺省参数和定义中的缺省参数不同。
  • 缺省参数只能从左向右缺省不能出现以下情况
void fun(int a = 5,int b =45)
{
 cout << a << b << endl;
}
int main()
{
 fun();
 fun(,10);//不能出现前一个使用缺省,后一个使用参数
 return 0;
}

函数的重载

概念

函数名相同,但形参的个数、形参类型的顺序、形参的类型不同的函数构成重载。重载常用于实现功能类似但数据类型不同的问题,如:交换两个整型和交换一个整型和一个浮点型。注:和函数的返回值无关,和形参名字无关

c++支持重载的原理

  • 程序的编译过程:预处理(展开头文件、宏替换、去除注释、条件编译),编译(检查代码语法、词法、语义、符号汇总、生成汇编代码),汇编(将汇编代码转换成机器语言),连接(合并段表、符号表的和并和符号表的重定位)

为什么c语言没有重载而c++有重载呢?这是因为C语言在生成符号表的时候用的是函数名,而c++用的是经过修饰的函数名。

  • c++的函数名修饰 我们执行一下下面的代码
#include<iostream>

using namespace std;

int add(int a, int b);
//{
// return a + b;
//}

int add(double c, double d);
//{
// return c + d;
//}
int main()
{
 add(1, 2);
 add(1.0, 2.0);
 return 0;
}

我们可以看见,虽然函数名相同,但是在编译时函数名被修饰了一番,这就允许了重载的存在。而c语言它在编译的时候是根据函数名来的,未加修饰,导致编译器不知道选哪一个函数为好,便没有重载。

引用

概念

引用相当于给变量“取外号”,编译器不会为了引用变量去开辟内存空间就好比旅馆不会为了周树人去给鲁迅再开一间房

引用的写法

类型& 引用变量名 = 引用实体

 int a = 0;
 int& b = a;

引用的特性

  • 引用在定义时必须初始化
  • 一个变量可以有多个引用(就像人可以有多个外号)
  • 引用一旦引用一个实体,那么该引用变量再不能引用其他实体(专一的很)

常引用

引用变量我们已经会了,怎么引用常量或者常变量呢? 请看代码

const int a = 0;
const int& b = a;
  • 注意:在引用过程中,权限不能放大,权限的缩小、平移是被允许的
  • 发生类型转换、整型提升的时候会产生一个临时变量, 而临时变量具有常性
double a = 1.0;
const int& b = a;

引用的使用场景

  1. 做输出参数 当我们使用一个函数,对它进行传参时,有的参数是用来输出的,比如我们在力扣刷题时遇见的int* returnsize,它是用来告知调用它的程序某数组的返回长度用的。
  2. 做返回值 当我们使用引用做返回值时,我们可以直接修改返回对象。 **注:当我们使用引用做返回值时,要保证被引用的空间稳定(不会随着该函数栈帧的销毁而销毁(如在该函数内创建的临时变量),堆上的空间和全局变量通常可以使用引用返回)

指针与引用的区别

  1. 在传值上面,引用的效率高于指针
  2. 指针变量是一个变量,在内存中会开辟空间,而引用不会。
  3. 引用在初始化时引用一个实体之后便不能引用其他实体,而指针可以
  4. 引用没有空引用的说法,但又空指针。
  5. 在sizeof中的含义不同,引用的结果为引用类型的大小,而指针始终是地址空间所占字节个数
  6. 引用自增则实体加1,指针自增是向后偏移一个类型的大小
  7. 有多级指针,没有多级引用
  8. 访问实体的方式不同,指针需要显式解引用(*),而引用是编译器自己处理
  9. 引用比指针的使用更为安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27645.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#(六十二)之泛型的约束

类型约束 基类约束有两个重要的目的。 1&#xff1a;它允许在泛型类中使用有约束指定的基类成员。 2&#xff1a;确保只能使用支持指定基类或派生类的类型实例。 约束是使用 where 上下文关键字指定的。 下表列出了五种类型的约束&#xff1a; 约束 说明 T&#xff1a;str…

SpringCloud集成Sleuth+Zipkin进行链路追踪

关于微服务链路追踪的一些概念&#xff1a;【分布式链路追踪】 文章目录 1、整合Seluth2、日志信息分析3、Zipkin介绍4、Zipkin服务端安装5、搭配Sleuth整合客户端Zipkin6、收集数据7、存储trace数据 1、整合Seluth Spring Cloud Sleuth是一个用于追踪的工具&#xff0c;它可以…

智能化升级:科智立RFID AGV地标传感器助力AGV小车升级改造

引言 在这个日新月异的信息化时代&#xff0c;各行各业都在不断进行升级改造&#xff0c;以求在激烈的市场竞争中立于不败之地。其中&#xff0c;智能化升级是提升企业核心竞争力的重要手段。本篇文章将以AGV小车的智能化升级为话题&#xff0c;深入探讨科智立RFID AGV地标传感…

从0到1:跑团小程序开发心得笔记

背景介绍 随着健康意识的兴起&#xff0c;越来越多的人选择加入跑步俱乐部&#xff0c;不仅体验到了运动的乐趣&#xff0c;也感受到了人生的不同色&#xff0c;那么通过小程序&#xff0c;把俱乐部搬到手机上&#xff0c;通过小程序了解俱乐部动态和运动常识&#xff0c;可以…

网络安全问题严重?Web3和IP代理能否提供解决方案?

在数字世界中&#xff0c;网络安全问题越来越严重。黑客和网络犯罪分子利用各种手段来窃取个人信息、盗取数字资产或破坏网络服务。为了应对这些威胁&#xff0c;Web3和IP代理成为了有力的工具&#xff0c;可以帮助改善网络安全性&#xff0c;提高网络防御水平。 首先&#xff…

智能会议记录:利用剪映和Claude实现高效会议纪要制作

具体操作步骤可以是: 1、使用录音笔或手机录音将会议过程录制下来。 2、将录音文件上传到pc端&#xff0c;使用剪映程序,利用语音转文本和自然语言处理技术,分析音频&#xff0c;生成文字稿。 3、打开Claude网站。 4、粘贴会议文字。 5、输入提示词&#xff1a; 用中文总结该…

office CVE-2022-30190 RCE 复现

简介: 当用户点击word等应用程序时&#xff0c;会使用URL协议调用MSDT,随即启动msdt.exe程序造成远程代码执行漏洞。简单来说就是攻击者可以恶意构造一个word文档&#xff0c;诱骗受害者点击&#xff0c;从而导致系统被黑。 0x01 环境部署 1. 测试版本 Microsoft Office LTSC …

cjson坑系列二cJSON_AddStringToObject、cJSON_AddItemToObject申请内存失败

在使用cjson的时候遇见这样一个问题&#xff08;先看问题代码&#xff0c;如下&#xff09; void platform_set_matrix_by_udp(cJSON* para, const char* str) {char* chintstr NULL, * intstr NULL;cJSON* index, * val;int ch;char* matrix;int number 0;int rows[8] { …

arcgis建筑密度容积率覆盖率

大多数研究会把覆盖率当作建筑密度。 用覆盖率更恰当一些。 建筑覆盖率&#xff1a; 建筑物占据面积/街区面积 [Sum_area]/ ([area]*1000000) 排序检查数据&#xff0c;最大值0.75&#xff0c;最小值0. 建筑覆盖率&#xff0c;建筑密度的范围都应该在0-1之内&#xff0c;不是…

RabbitMQ死信交换机、TTL及延迟队列

一&#xff0c;死信交换机 1&#xff0c;什么是死信交换机 了解死信交换机之前我们先来了解一下什么是死信&#xff0c;当一个队列满足下面的三种情况的时候我们一般称为死信&#xff08;dead letter&#xff09;&#xff1a; 消费者使用basic.reject或 basic.nack声明消费失…

消息队列——spring和springboot整合rabbitmq

目录 spring整合rabbitmq——生产者 rabbitmq配置文件信息 倒入生产者工程的相关代码 简单工作模式 spring整合rabbitmq——消费者 spring整合rabbitmq——配置详解 SpringBoot整合RabbitMQ——生产者 SpringBoot整合RabbitMQ——消费者 spring整合rabbitmq——生产者 使…

现代化 Android 开发:Jetpack Compose 最佳实践

作者&#xff1a;古哥E下 如果一直关注 Compose 的发展的话&#xff0c;可以明显感受到 2022 年和 2023 年的 Compose 使用讨论的声音已经完全不一样了, 2022 年还多是观望&#xff0c;2023 年就有很多团队开始采纳 Compose 来进行开发了。不过也有很多同学接触了下 Compose&am…