秽土重生之我要学C++(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:本文介绍c++的一些基本语法:

本着对C语言的热爱,想着再续前缘,继续选一门语言学习,网上吹Java太魔幻了,诸如base广州,面了四五家公司,拿了7个offer,趁着互联网红利期赶快入行,狠狠地赚一笔,再加上铺天盖地的学习路线,C++是一股清流,虽然事实是Java的岗位需求比C++高,但C++比Java的薪资高,相对也没那么卷。大家感兴趣的话可以做一个调研,很多大学的计算机课程中Java是必修课,反而C++是选修课,不难得出,在校招的时候大部分人都会投Java,C++的机会相对大了一些。不过语言不是重点,可能C++er招进去转写go,写java,哪个组缺人往哪跑,所以语言并不是重点,成为一门合格的工程师更看重的是一些偏底层的对象,比如算法能力,网络协议,Linux等等等等,我们所学所准备的东西只是给HR一个结果,让HR看到你的学习能力,这才是最重要的。
以下数据来自BOSS直聘,牛客网
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在当今这个大学生就业压力巨大的现在,应届的学生能拿到20~30w的薪资,这已经是很可观了

一、第一个C++程序

#include<iostream>
using namespace std;
int main()
{
	cout << "Hello World" << endl;
	return 0;
}
#include<iostream>

调库函数

using namespace std;

命名空间的展开,给该cpp文件授权访问std,如果不加此句,下面代码变成

std::cout << "Hello World" <<std::endl;

“cout<<i<<endl” 是 C++ 程序设计语言中的标准输出语句,其中 “cout” 是 C++ 中的标准输出流对象, “<<” 是流插入运算符, “i” 是变量, “endl” 是换行符。它的意思是将变量 “i” 的值输出到屏幕上,并在输出后换行。

二、函数重载

概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同
,常用来处理实现功能类似数据类型
不同的问题

实操

#define _CRT_SECURE_NO_WARNINGS	1
#include<iostream>
using namespace std;
函数重载
void func(int i, double d)
{
	cout << "void func(int i, double d)" << endl;
}
void func(double d,int i)
{
	cout << "void func(double d,int i)" << endl;
}
int main()
{
	func(1, 1.1);
	func(1.1, 1);
	return 0;
}

运行结果:
在这里插入图片描述
由此看出,C++很聪明,很智能得识别实参的类型并进行分类使用

原理

函数名修饰规则
_z+函数名字节数+函数名+实参首字母缩写
func(int i, double d)修饰为_z4funcid
从汇编的结果可以验证
在这里插入图片描述

程序运行的过程

test.cpp
预处理-头文件展开,宏替换,去注释,条件编译(#ifdef)
test.i
编译 检查愈发,生成汇编代码(指令代码)
test.s
汇编 将汇编代码生成二进制机器码
test.o
链接 合并链接,生成exe
函数名修饰规则cpp
在这里插入图片描述

三、引用


概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空
,它和它引用的变量共用同一块内存空间。
比如鲁智深,他的外号叫花和尚,绰号是天立星双枪将,这三个名字都是指同一个人
Alt

示例

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

运行结果
在这里插入图片描述

引用的特性

  1. 引用在定义时必须初始化
  2. 一个变量可以有多个引用
  3. 引用一旦引用一个实体,再不能引用其他实体

便于接收参数

不用指针版本的Swap函数

void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}

性能测试

#define _CRT_SECURE_NO_WARNINGS	1
#include<iostream>
using namespace std;
#include <time.h>
struct A { int a[10000]; };
void TestFunc1(A a) {}
void TestFunc2(A& a) {}
void TestRefAndValue()
{
	A a;
	// 以值作为函数参数
	size_t begin1 = clock();
	for (size_t i = 0; i < 10000; ++i)
		TestFunc1(a);
	size_t end1 = clock();
	// 以引用作为函数参数
	size_t begin2 = clock();
	for (size_t i = 0; i < 10000; ++i)
		TestFunc2(a);
	size_t end2 = clock();
	// 分别计算两个函数运行结束后的时间
	cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
	cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
}
int main()
{
	TestRefAndValue();
}

在这里插入图片描述
可以看出引用的效率是指针的7倍

总结

欢迎评论区指正交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江财菊圃路彭家桥C++一霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值