C++语言基础

news/2025/1/22 8:05:48/文章来源:https://www.cnblogs.com/laobei-uu/p/18238090

C++语言基础

1. 函数

1.1 C++新增:多态

  • 函数重载( overload )

  • 函数重写(覆写,overrride)

编译器会根据实参的类型来⾃动确定调⽤哪个重载函数

1.2 C++新增:内联函数

修饰关键字:inline

作用:编译时直接将函数替换为一堆代码,减少函数调用带来的开销。

比#define安全

成员函数默认内联,即使不写inline;外部函数必须加inline才能内联。

1.3 内存分配管理

每一个函数在栈空间上都有一段栈帧,保存这当前函数所需的变量等。当函数出栈时,这些成员也随之销毁。

2. const修饰符

const修饰的对象、变量,在运行过程中不能修改其值。

const int a = 1;        
a = 2;   // 错误!
// 会报错:error: assignment of read-only variable 'a'

注意:常量必须在声明时被初始化 const int a; // 错误!

关于const可修改的练习:

例1

int main() {const int a = 1;int* add = &a;   // 这一句有语法问题:invalid conversion from 'const int*' to 'int*'*add = 2;return 0;
}

编译器在做隐式转换的时候不会添加或删除const修饰,如果类型不匹配会报语法错误。

正确做法:使用强制类型转换,消除语法问题

int main() {const int a = 1;int* add = (int*)&a;  // 正确*add = 2;return 0;
}

编译器不会自作主张修改const修饰,因为可能有潜在风险,但是如果人为地强制转化,说明是程序员告诉编译器:“就这么干,我说的!“。编译器就会很放心地让程序员来承担责任,不会报错 /doge

注意:这里a为局部变量,即使被const修饰,也保存在栈上(假设没有常量折叠)。如果换做全局变量,被const修饰后存储在常量区中,为只读属性,没有办法修改的。

例2:指针变量也是变量,所以可用const修饰

常量指针

int main() {char array[] = {'a', 'b', 'c', 'd', '\0'};char* const name = array;    // 注意这里的 * 和 const的前后位置name[0] = 'H';               // 正确name = (char*)"Hi";          // 错误! assignment of read-only variable 'name'return 0;
}

指向常量的指针

int main() {char array[] = {'a', 'b', 'c', 'd', '\0'};char const* name = array;    // 注意这里的 * 和 const的前后位置name[0] = 'H';               // 错误!name = (char*)"Hi";          // 正确return 0;
}

这里可以这样子去记忆:const负责在他左边的东西,如果左边是char*,说明地址是常量,如果左边是char,说明字符是常量。

3. 动态内存分配

常规的静态分配内存:int a[10] = {0};

数组a在编译的时候就被分配了固定大小的内存。

int n = 10;
int b[x];   // 对于多数编译器是不允许的,即使允许也会有⻛险,如多线程编程

而使用动态定义变量更灵活

int n = 10;
int* b = new int[n]();

注意:最后记得delete

4. 作用域运算符::

  • 使用类的静态成员

  • 解除被隐藏全局函数或变量

    int num = 1;  // 全局变量
    main() {int num = 2;            // 局部变量cout << num << endl;    // 显示局部变量cout << ::num << endl;  // 显示全局变量
    }
    

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

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

相关文章

android studio导入项目--解决gradle-headache问题

基础导入: 首先删除要导入项目的两个文件夹:删除后记事本打开build.gradle 修改这个版本,修改成什么呢?找你以前配置好的项目文件夹下同名文件中的版本或者在android studio打开项目结构查看如图,我的是7.4.2那我就把刚才那个版本改成7.4.2 然后打开AS,点击文件,点击new…

FastApi第一个demo

## 安装fastapi #### pip install fastapi #### 再执行 pip install Uvicorn 安装 ####导入模块包 import uvicorn from fastapi import FastAPI#创建项目对象 app = FastAPI()# 通过装饰器#app.来标识请求方式,括号里放请求路由地址 @app.get("/") async def home(…

R语言结合新冠疫情COVID-19对股票价格预测:ARIMA,KNN和神经网络时间序列分析

原文链接:http://tecdat.cn/?p=24057 原文出处:拓端数据部落公众号 1.概要 本文的目标是使用各种预测模型预测Google的未来股价,然后分析各种模型。Google股票数据集是使用R中的Quantmod软件包从Yahoo Finance获得的。2.简介 预测算法是一种试图根据过去和现在的数据预测未…

【大数据部落】 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战

原文链接:http://tecdat.cn/?p=1557 原文出处:拓端数据部落公众号“了解不同的股市状况,改变交易策略,对股市收益有很大的影响。 弄清楚何时开始或何时止损,调整风险和资金管理技巧,都取决于股市的当前状况。 ▼ 有些策略在波澜不惊的股市中表现良好,而有些策略可能适合…

非线性混合效应 NLME模型对抗哮喘药物茶碱动力学研究|附代码数据

全文下载链接:http://tecdat.cn/?p=24074 最近我们被客户要求撰写关于非线性混合效应 NLME模型的研究报告,包括一些图形和统计输出。 茶碱数据文件报告来自抗哮喘药物茶碱动力学研究的数据。给 12 名受试者口服茶碱,然后在接下来的 25 小时内在 11 个时间点测量血清浓度 h…

BionetServer-No1使用说明-进阶(Docker方式)

BionetServer-No1使用说明-进阶(Docker方式)Version:1.0 基础篇更新记录:简化了文档的内容,拆分了文档分为入门和进阶使用,Docker版本添加R的使用,删除了Matlab版本的内容,请使用桌面版本。Date: 2024.06.07 Authors:NeoNeuxs 目录BionetServer-No1使用说明-进阶(Dock…

ffmpeg音频编码之pcm转码aac

方法1:命令转码# 转码ffmpeg -ac 2 -ar 48000 -f s16le -i input.pcm -acodec libfdk_aac output.aac # 播放 ffplay output.aac方法2:代码转码 main.c#include "libavutil/log.h" #include "libavutil/avutil.h" #include "libavcodec/avcodec.h&q…

2024第一届甲壳虫跑团百公里接力赛

2024第一届甲壳虫跑团百公里接力赛活动记录 经过统计大家的投票结果,甲壳虫跑团管理层决定于2024年6月2号举行第一届百公里接力赛活动。活动奖励每位参与接力和摄影的同学迷你玻璃杯一个。活动过程 早上八点,在东操场开始了第一棒的出发,本次接力采取传递“跑表”的形式,每…

Day17| 110.平衡二叉树、 257. 二叉树的所有路径 、 404.左叶子之和

110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是深度,可以巩固一下。 题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.html # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=Non…

2024.6.7

18万条数据public class HotCategoryTop10_3 {public static void main(String[] args) {// TODO 搭建Spark的运行环境SparkConf conf = new SparkConf();conf.setAppName("HotCategoryTop10");conf.setMaster("local[*]"); // Yarn : Spark On YarnJavaSp…

Android Media Framework(三)OpenMAX API阅读与分析

这篇文章我们将聚焦Control API的功能与用法,为实现OMX Core、Component打下坚实的基础。1、OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之间,OMX Core提供了两组API给IL Client使用,一组API用于管理OMX组件,另一组API用于操作/使用创建的OM…