C++从零开始(六):务实基础(下)复合类型及转换
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
四、复合类型及转换
什么是复合类型?这听起来好像是有点新奇的概念。
从基本数据类型(比如int、char)或其他复合数据类型构造出来的数据类型,就称为复合类型。
在前面我们已经接触过所谓的复合类型:
数组(std::string、std::array 等)、指针类型(函数指针或者说函数,指向对象的指针等)、引用类型。
举个例子,下面函数func 类型是void()(int, double) ,它由基本类型组成,使其成为复合类型:
123void func(int x, double y){}
本章主要介绍的复合类型是结构体(注意结构体大小计算)和枚举(注意枚举作用范围问题),以及各种类型之间的转换:
用户隐式转换及发生的情况;
用户四种显示转换,包含C风格和C++风格;
t特别补充,string类型和其它类型之间的转换。
4.1 结构体
4.1.1 从C谈起
在C语言中定义一个典型结构体struct如下:
12345678910111213 ...
C++从零开始(三):务实基础(上)快速入门
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
一、快速开始
1.1 认识C++
1.1.1 为什么需要C++
前有Java后有Python、Go、Rust,C++作为一个“老古董”似乎有点格格不入了?
其实不然,C 和 C++ 的底层设计理念可以概括为“信任程序员”——这既美妙又危险。但也正是C++ 允许程序员高度自由地做他们想做的事,因此,在需要高性能和精确控制内存和其他资源的情况下表现出色 。
例如,下面是C++擅长的一些领域,它们对性能要求通常极其苛刻:
视频游戏
实时系统(例如用于运输、制造等……)
高性能金融应用(例如高频交易)
图形应用和模拟
生产力/办公应用
嵌入式软件
音视频处理
人工智能和神经网络
如果你想更了解计算机的本质,也对这些领域感兴趣,C/C++应该是你不二的选择。
1.1.2 C++组成
标准的C++由两个重要部分组成:
核心语言,提供了所有构件块,包括变量、数据类型和常量等等。
C++ 标准库,提供了大量的函数,用于操作文件、字符串等,包含标准模板库(STL),提供了大量的方法,用于 ...
C++从零开始(四):务实基础(中)指针和引用
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
二、指针&引用
第一次学C++,指针和引用令当时还是初学者的我感到非常的困惑:
普通变量就可以代表一块内存区域,我们可以直接使用原始变量,为什么还需要指针?
指针解决了普通变量的不足,为什么又引入引用的概念?
引用本质是什么?为什么操作引用等价操作变量本体?
希望曾经的我,现在的你可以在本章找到答案。
2.1 指针
2.1.1 为什么需要指针
重新审视变量
变量可以理解为某块内存区域地址别名,这块内存区域保存变量的值。
下面举一个实例:
12int x = 0;x = 1;
对应汇编代码:
12movl $0, -12(%rbp)movl $1, -12(%rbp)
当CPU执行int x = 0,会在内存(这里是栈)腾出一块区域(-12(%rbp))用来存储变量x;然后0被存入x所代表的内存区域(-12(%rbp))。
继续执行x=1,1被存入变量x所代表的内存区域。
可以看到,变量的存在使得我们:不用记住为分配x的内存地址是什么,我们通过变量名 ...
C++从零开始(五):务实基础(下)函数
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
三、函数
3.1 基本概念
怎么定义函数?
以前,我比较倾向将函数定义为顺序执行的语句集合。现在我认为更恰当的说法应该是:函数是一个可重用的语句序列,旨在完成特定的工作。
C++ 中函数一般形式如下:
1234return_type function_name( parameter_list ){ // body of the function}
上面包含一个函数的所有组成部分:
返回类型(return_type):一个函数可以返回一个值,return_type 是函数返回的值的数据类型。不需要返回值,return_type 是关键字 void。
函数名称(function_name):函数的实际名称,函数名和参数列表一起构成了函数签名。
所谓”签名“则意味着这可以唯一标识一个函数。
参数列表(parameter_list):参数就像是占位符。当函数被调用时,可向参数传递一个值,这个值被称为实际参数,参数列表包括函数参数的类型、顺序、数量 ...
C++从零开始(一):环境搭建(上)VSCode远程开发
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
实习的时候,公司会给每个人配置一台远程服务器,用于日常开发。体验下来感觉很不错的:
所有的开发代码、环境均运行在云端,任何一台机器可直连快速开发,本地无需任何部署环境或者代码等;
实际C/C++开发大部分也是在Linux环境上完成的,拥有一台自己的(云)Linux开发机还是很有必要的(省去了Win上开发各种怪问题)。
因此,在这个C++系列中,所有的代码也将以:本地(Win)+远程(Linux)形式进行开发。
好了,让我们快速开始吧。
快速开始
本文开发环境如下:
本地:Win10 + VSCode
远程:CentOS 7 (腾讯云)
云上开发
腾讯云/阿里云服务器都有学生优惠≈10元/月,以下是撸羊毛详细过程。
进入学生优惠购买界面,以腾讯云为例:腾讯云学生优惠
地区可选 上海三区 & 广州四区等,广州离重庆更近一点所以选择 广州四区 。
选择操作系统为:CentOS 7.6.64
付费&设置密码
点击立即购买后,记得设置好相应root ...
C++从零开始(二):环境搭建(下)g++/Makefile/CMake快速入门
🌟《C++从零开始》 系列,开始更新中…
C++从零开始https://hwh.zone/p/62712
作为一名C/C++程序员,g++/Makefile/CMake等相关工具是必备的基础。但之前使用中一直存在一些困惑,因此参考了一些资料[1][2][3],动笔写了这篇文章,希望可以帮助自己或大家:
对编译处理过程有个基本认知;
能初步使用编译工具g++/Makefile/CMake;
能初步使用CMake编译大型项目。
才疏学浅,若有错误不吝指正。
g++
在下文中,我们将多次利用了g++编译代码。为了方便后续学习Makefile和CMake,我们先进行简单总结。
以hello.cpp为例。
12345678#include <iostream>using namespace std;int main() { cout << "Hello, World!" <<endl; return 0;}
快速入门
程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本, ...
校招笔记(八)_计算机基础_场景&智力题
我的校招记录:校招笔记(零)_写在前面 ,以下是校招笔记总目录。
备注
算法能力(“刷题”)
这部分就是耗时间多练习,Leetcode-Top100 是很好的选择。
补充练习:codeTop
计算机基础(上)(“八股”)
校招笔记(一)__Java_Java入门
C++后端后续更新
校招笔记(一)__Java_面对对象
校招笔记(一)__Java_集合
校招笔记(一)__Java_多线程
校招笔记(一)__Java_锁
校招笔记(一)__Java_JVM
计算机基础(下)(“八股”)
校招笔记(二)__计算机基础_Linux&Git
校招笔记(三)__计算机基础_计算机网络
校招笔记(四)__计算机基础_操作系统
校招笔记(五)__计算机基础_MySQL
校招笔记(六)__计算机基础_Redis
校招笔记(七)__计算机基础_数据结构
校招笔记(八)__计算机基础_场景&智力题
校招笔记(九)__计算机基础_相关补充
项目&实习
主 ...
校招笔记(七)_计算机基础_数据结构
我的校招记录:校招笔记(零)_写在前面 ,以下是校招笔记总目录。
备注
算法能力(“刷题”)
这部分就是耗时间多练习,Leetcode-Top100 是很好的选择。
补充练习:codeTop
计算机基础(上)(“八股”)
校招笔记(一)__Java_Java入门
C++后端后续更新
校招笔记(一)__Java_面对对象
校招笔记(一)__Java_集合
校招笔记(一)__Java_多线程
校招笔记(一)__Java_锁
校招笔记(一)__Java_JVM
计算机基础(下)(“八股”)
校招笔记(二)__计算机基础_Linux&Git
校招笔记(三)__计算机基础_计算机网络
校招笔记(四)__计算机基础_操作系统
校招笔记(五)__计算机基础_MySQL
校招笔记(六)__计算机基础_Redis
校招笔记(七)__计算机基础_数据结构
校招笔记(八)__计算机基础_场景&智力题
校招笔记(九)__计算机基础_相关补充
项目&实习
主 ...
校招笔记(六)_计算机基础_Redis
我的校招记录:校招笔记(零)_写在前面 ,以下是校招笔记总目录。
备注
算法能力(“刷题”)
这部分就是耗时间多练习,Leetcode-Top100 是很好的选择。
补充练习:codeTop
计算机基础(上)(“八股”)
校招笔记(一)__Java_Java入门
C++后端后续更新
校招笔记(一)__Java_面对对象
校招笔记(一)__Java_集合
校招笔记(一)__Java_多线程
校招笔记(一)__Java_锁
校招笔记(一)__Java_JVM
计算机基础(下)(“八股”)
校招笔记(二)__计算机基础_Linux&Git
校招笔记(三)__计算机基础_计算机网络
校招笔记(四)__计算机基础_操作系统
校招笔记(五)__计算机基础_MySQL
校招笔记(六)__计算机基础_Redis
校招笔记(七)__计算机基础_数据结构
校招笔记(八)__计算机基础_场景&智力题
校招笔记(九)__计算机基础_相关补充
项目&实习
主 ...
校招笔记(五)_计算机基础_MySQL
我的校招记录:校招笔记(零)_写在前面 ,以下是校招笔记总目录。
备注
算法能力(“刷题”)
这部分就是耗时间多练习,Leetcode-Top100 是很好的选择。
补充练习:codeTop
计算机基础(上)(“八股”)
校招笔记(一)__Java_Java入门
C++后端后续更新
校招笔记(一)__Java_面对对象
校招笔记(一)__Java_集合
校招笔记(一)__Java_多线程
校招笔记(一)__Java_锁
校招笔记(一)__Java_JVM
计算机基础(下)(“八股”)
校招笔记(二)__计算机基础_Linux&Git
校招笔记(三)__计算机基础_计算机网络
校招笔记(四)__计算机基础_操作系统
校招笔记(五)__计算机基础_MySQL
校招笔记(六)__计算机基础_Redis
校招笔记(七)__计算机基础_数据结构
校招笔记(八)__计算机基础_场景&智力题
校招笔记(九)__计算机基础_相关补充
项目&实习
主 ...