☺初识c++(语法篇)☺

news2024/9/20 7:47:59

目录

一·命名空间(namespace):

二·cout与cin简述:

三·缺省参数:

四·函数重载:

五·引用:

六·内联函数:

七·c++中的nullptr简述:


一·命名空间(namespace):

namespace ns {
	int t = 5;
}//习惯写法:namespace+名字,注:末尾无;

这里相当于命名空间域;访问的时候要ns::+内部的量

对于c++域的理解:可分为四大域:函数局部域,全局域,命名空间域,类域。

其中前两个影响编译逻辑和生命周期,后两者不影响。

对于命名空间特点:

首先它是可以嵌套的:

namespace ns {
	int i = 10;
	int a = 10;
	namespace ne {
		int a = 2;//命名空间的嵌套
	
	}
}

这时如果访问ne内的a:可以ns::ne::a;或者可以不完全展开即 using namespace ns::ne。

还有一个就是多文件定义同一个命名空间它会自动合并如:

在头文件中定义一个ns命名空间,在cpp中也存在ns命名空间,同时在cpp调用就可以用到头文件中的ns。

对于standard 命名空间,在iostream库里存在的cin cout 就定义在std这个命名空间里。

二·cout与cin简述:

cin输入的数据自动识别为字符型,cout输出也是类同。

前者配合>>后者配合<<,由于是二元操作符,故只能是两个操作数即里面要么是变量自动识别,要么是字符串。

结合endl(end line ):都是存在于iostream库中的namespace std,故可以对它展开或者std::来使用。

int k= 10;
int e = 0;
int main() {


	std::cout << "k是" << k<< endl;
	std::cin >> e >> k;
	std::cout << "k是" << k << endl;
	std::cout << "e是" << e << endl;


}

为了提高io效率,可以在程序中加入:

ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);

三·缺省参数:

顾名思义,就是对于函数有的参数没有的时候可以去固定值,也可以输入:

大致就是要从函数所有参数的右边开始缺省,到左边,但是不能跳跃,当传参的时候省略的可传可不传。

using namespace std;
namespace hs {
	int Func(int a, int b, int c = 10) {
		return a + b + c;
	}
	 
}
#if 0
int main() {
	cout << hs::Func(1, 2) << endl;

}
#endif

这里由于为给传参,故用默认的即输出13。 

四·函数重载:

即重载在同一作用域下,参数个数不同或者类型不同而函数名相同可以构成重载。通过调用函数的时候传参个数或者类型来取决调用哪个函数。

如:

using namespace std;
namespace hs {
	int Func(int a, int b, int c = 10) {
		return a + b + c;
	}
	double Func(double a, int b, int c = 11) {
		return a + b + c;
	}
}
#if 0
int main() {
	cout << hs::Func(1.1, 2) << endl;

}
#endif

这里调用的就是double类型的Func。(参数类型不同)

using namespace std;
namespace hs {
	int Func(int a, int b) {
		return a + b ;
	}
	int Func(int a, int b, int c = 11) {
		return a + b + c;
	}
}
#if 0
int main() {
	cout << hs::Func(1, 2) << endl;

}
#endif

 这里调用的就是第一个Func。(参数个数不同),当然,也可以是参数顺序不同等等。

 而函数重载是为了能调用的时候根据输入区分开不同的函数,故当只有返回值不同时不能作为重载条件:

void fxx()
{}

int fxx()
{
 return 0;
}

上面这样当调用的时候编译器无法区分。

void f1 ()
{
cout << "f()" << endl;
}
void f1 ( int a = 10)
{
cout << "f(int a)" << endl;
}//由于参数是不同的,可以构成重载,但是调用的时候如果不输入,编译器无法区分调哪一个。

五·引用:

即类型&引⽤别名=引⽤对象

相当于给它取了一个新的名字,但还是同一块内存区域,即地址不变,可以理解为改变的时候类似于指针操作。

因此就可以换一种方式交换两个数:

namespace yy {
	int c = 10;
	int& b = c;
	namespace jh {
		int m = 1;
		int n = 2;
		void swap(int& a, int& b) {
			int tmp = a;
			a = b;
			b = tmp;
		}
	}

}
using namespace yy::jh;
#if 0
int main() {
	cin >> yy::c;
	cout << &yy::b <<'\n'<< & yy::c << endl;
	cout << m <<" "<< n << endl;
	swap(m, n);
	cout << m << " " << n << endl;
}
#endif

这里通过这个引用把m n的值交换了,但m n这块地址没有变,通过m n找到对应的地址把里面的数据改变。(因为a,b是m n的别名故改变a b即改变m n) 。

这里注意一旦引用实体,不能再引用其他:

int main() {
	int a = 10;
	int& b = a;
	int d = 11;
	b = d;
	cout << "b" <<&b<<"  "<<"a" << &a << "  " << "d" << &d << endl;
	return 0;
}

这里可以看出,a b还是同一块地址,b指向的地址里数据只是对d数据的一次拷贝,而不是让b这个实体再次引用d。 

const引用:对于权限引用:范围可以缩小,可以等同,但不能放大:

即:

const int a=10;
const int &b=a;//等同

int c=10;
const int& d=c;//缩小

这里虽然地址是同一个,但访问权限不同。

再看着一个例子:

const int a=10;
int d=a;//这里并非扩大访问,只是把a值copy给d,两者地址不同

下面引出临对象:所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象。

而当在c++中经常会出现,那么把它就要当成常性对待,不可修改故用const修饰。

int a=10;
 int b=1;
const int &c=(a+b);
//这里a+b就是临时对象

再比如隐式类型转化出现的临时对象:

double d = 3.14;
int i = d;
const int& ra = d;
cout << i << " " << ra << endl;

六·内联函数:

 即用inline修饰的函数,设计出来代替宏:

而宏:采用直接替换,不开辟空间,但效率慢。

普通函数:开辟多余空间,即建立栈帧,效率高。

而内联函数结合了这两点:

即当使用内联函数,如果遇到短小函数,不复杂的则编译器按照宏的方式去直接替换;但是遇到比如有递归等,就会按照函数方式直接展开建立栈帧去执行如:

namespace nl{

	inline int add(int& a, int &b) {
		return a + b;
	}
	inline int Add(int a, int b) {
		if (a + b > 10) {
			return a + b;
		}
		return Add(a+3,b+3)+1;
	}
}
int main() {
	int m = 1, n = 2;
	cout << nl::add(m, n) << endl;
	//这里由于短小函数,故采用类似宏的直接替换。
	cout << nl::Add(m, n) << endl;
	//这里由于出现了递归故采用直接展开即开辟一定空间。
	return 0;
}

 再如c++库里面swap函数就用的inline修饰的内联函数;

适用范围:频繁调用的短小函数(非递归)。

七·c++中的nullptr简述:

C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换 成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被 隐式地转换为指针类型,⽽不能被转换为整数类型。类似c中的NULL。

void f(int x)
{
	cout << "f(int x)" << endl;
}
void f(int* ptr)
{
	cout << "f(int* ptr)" << endl;
}

int main() {
	f(0);
	f(NULL);
	f(nullptr);
	return 0;


}

这里对于c语言可能NULL可以这样,但是c++会直接识别为0;故在这里c++对空指针用nullptr。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chromium编译指南2024 Linux篇-同步Chromium第三方库(四)

1.引言 在成功拉取Chromium源码并创建新分支后&#xff0c;我们需要进一步配置开发环境。这包括拉取必要的第三方库以及设置hooks&#xff0c;以确保我们能够顺利进行编译和开发工作。以下步骤将详细介绍如何进行这些配置。 2.拉取第三方库以及hooks Chromium 使用了大量的第…

2024第六届上海国际新材料展览会-12月精彩呈现

2024第六届上海国际新材料展览会 The 6th shanghai International New Materials Exhibition in 2024 时 间&#xff1a;2024年12月18-20日 地 点&#xff1a;上海新国际博览中心 CIME 2024专业、权威&#xff0c;涵盖整个新材料行业的国际盛会。 期待与您在CIME 2024现场相…

24-7-9-读书笔记(九)-《爱与生的苦恼》[德]叔本华 [译]金玲

文章目录 《爱与生的苦恼》阅读笔记记录总结 《爱与生的苦恼》 《爱与生的苦恼》叔本华大佬的名书&#xff0c;里面有其“臭名昭著”的《论女人》&#xff0c;抛开这篇其他的还是挺不错的&#xff0c;哲学我也是一知半解&#xff0c;这里看得也凭喜好&#xff0c;这里记录一些自…

大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数

用语言介绍一下Transformer的整体流程 1. 输入嵌入&#xff08;Input Embedding&#xff09; 输入序列&#xff08;如句子中的单词&#xff09;首先通过嵌入层转化为高维度的向量表示。嵌入层的输出是一个矩阵&#xff0c;每一行对应一个输入单词的嵌入向量。 2. 位置编码&…

Qt 创建的窗口一闪而过【已解决】

Qt 创建的窗口一闪而过 引言一、详细的解决方案 - 附代码二、参考博文 引言 创建的窗口一闪而过&#xff0c;就是创建完立马被销毁了&#xff0c;常见情况是在一个函数中创建窗口并show() - 即创建在了栈上&#xff0c;函数结束局部变量(窗口)自动被释放。主流的解决方法有两种…

(HAL)stm32f407+freertos通过usb驱动移远4G模块-EC600U

概述 本篇文章主要介绍: 如何使用STM32CubeMX创建stm32F407+freertos+usb host的基础工程。USB-HOST-CDC驱动运行过程。如何根据4G模块的具体信息修改usb相关代码。MCU如何通过usb与4G模块通信,收发数据。调试过程中遇到的问题以及解决办法。 整个过程中在网上搜罗了很多参考…

机场的出租车问题折线图

分析并可视化机场离场车辆数数据 本文将详细介绍如何使用Python的正则表达式库re和绘图库matplotlib对机场离场车辆数数据进行分析和可视化。以下是具体步骤和代码实现。 数据资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rU-PRhrVSXq-8YdR6obc6Q?pwd1234 提…

干货:高水平论文写作思路与方法

前言:Hello大家好,我是小哥谈。高水平论文的写作需要扎实的研究基础和严谨的思维方式。同时,良好的写作技巧和时间管理也是成功的关键。本篇文章转载自行业领域专家所写的一篇文章,希望大家阅读后可以能够有所收获。🌈 目录 🚀1.依托事实/证据,通过合理的逻辑,…

每日刷题(二分查找,匈牙利算法,逆序对)

目录 1.Sarumans Army 2.Catch That Cow 3.Drying 4.P3386 【模板】二分图最大匹配 5. Swap Dilemma 1.Sarumans Army 3069 -- Sarumans Army (poj.org) 这道题就是要求我们在给的的位置放入 palantir&#xff0c;每个 palantir有R大小的射程范围&#xff0c;要求求出最少…

C# Bitmap类型与Byte[]类型相互转化详解与示例

文章目录 一、Bitmap类型转Byte[]类型使用Bitmap类的Save方法使用Bitmap类的GetBytes方法 二、Byte[]类型转Bitmap类型使用MemoryStream将Byte[]数组转换为Bitmap对象使用System.Drawing.Imaging.BitmapImage类 总结 在C#编程中&#xff0c;Bitmap类型和Byte[]类型之间的相互转…

【刷题汇总 -- 求最小公倍数、数组中的最长连续子序列、字母收集】

C日常刷题积累 今日刷题汇总 - day0081、求最小公倍数1.1、题目1.2、思路1.3、程序实现 -- 穷举法1.2、程序实现 -- 辗转相除法 2、数组中的最长连续子序列2.1、题目2.2、思路2.3、程序实现 3、字母收集3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日刷题汇总 - day008 1、…

01:简易的电动车防盗报警器

简易的电动车防盗报警器 1、震动传感器模块的使用2、使用震动传感器模块控制继电器开关3、433M无线发射接收模块的使用 需要材料&#xff1a; 1、51单片机 2、震动传感器模块 3、继电器模块 4、高功率喇叭 5、433M无线发射接收模块 6、弱干杜邦线 1、震动传感器模块的使用 接好…

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数&#xff08;m_colmap&#xff09;和 为轮廓图绘制颜…

大话光学原理:2.最短时间原理、“魔法石”与彩虹

一、最短时间原理 1662年左右&#xff0c;费马在一张信纸的边角&#xff0c;用他那著名的潦草笔迹&#xff0c;随意地写下了一行字&#xff1a;“光在两点间选择的路&#xff0c;总是耗时最少的。”这句话&#xff0c;简单而深邃&#xff0c;像是一颗悄然种下的种子&#xff0c…

EEG源定位(EEG Source Localization)

EEG源定位&#xff08;EEG Source Localization&#xff09;是一种用于确定大脑内部电活动来源的方法。通过在头皮上记录的电信号&#xff08;EEG&#xff09;&#xff0c;源定位技术可以推断这些信号的起源&#xff0c;即确定大脑中的哪些区域产生了这些电活动。这对于理解大脑…

Java项目:基于SSM框架实现的中小型企业财务管理系统【ssm+B/S架构+源码+数据库+答辩PPT+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的中小型企业财务管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

ESP32的I2S引脚及支持的音频标准使用说明

ESP32 I2S 接口 ESP32 有 2 个标准 I2S 接口。这 2 个接口可以以主机或从机模式&#xff0c;在全双工或半双工模式下工作&#xff0c;并且可被配置为 8/16/32/48/64-bit 的输入输出通道&#xff0c;支持频率从 10 kHz 到 40 MHz 的 BCK 时钟。当 1 个或 2 个 被配置为主机模式…

IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)

1. IEC 62056标准体系 IEC 62056标准体系目前共包括六部分&#xff0c;见图1&#xff1a; 第61部分&#xff1a;对象标识系统第62部分&#xff1a;接口类第53部分&#xff1a;COSEM应用层第46部分&#xff1a;使用HDLC&#xff08;High Level Data Link Control&#xff09;协…

24吉林事业单位报名照上传通过别忘了这一步

24吉林事业单位报名照上传通过别忘了这一步 #吉林事业单位 #吉林三支一扶 #吉林事业编 #事业单位报名照片 #吉林事业单位考试 #吉林市事业单位

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建技术

在过去几年中&#xff0c;人工智能领域的发展迅猛&#xff0c;尤其是大语言模型的应用&#xff0c;为各行各业带来了前所未有的创新与突破。从ChatGPT-3.5的推出到GPT Store的上线&#xff0c;再到最新的多模态交互ChatGPT-4o&#xff0c;OpenAI不断引领科技潮流&#xff0c;推…