C++基础语法总结

C++使用

  • C++的源文件扩展名是:cpp
  • C++程序的入口是main函数
  • C++完全兼容c语言的语法

1、cin、cout

  • C++中常使用cin、cout进行控制台的输入和输出
#include <iostream>
using namespace std;int main() {cout << "hello world !!!" << endl;return 0;
}
  • cin用的是右移运算符 >> ,cout用的是左移运算符 <<
  • endl是换行的意思

2、函数重载(overload)

  • 规则

    • 函数名相同
    • 参数个数不同、参数类型不同、参数顺序不同
  • 注意

    • 返回值类型与函数重载无关
    • 调用函数时,实参的隐式类型转换可能会产生二义性
  • 本质

    • 采用了name mangling或者叫name decoration的技术
    • C++编译器默认会对符号名(比如函数名)进行改编、修饰、有些地方也叫做“命名倾轧”
    • 重载时会生成多个不同的函数名,不同编译器(MSVC、g++)有不同的生成规则
    • 通过IDA打开(VS_Release_禁止优化)可以看到

3、默认参数

  • C++允许函数设置默认参数,在调用时可以根据情况省略实参,规则如下:
    • 默认参数只能按照从右到左的顺序(即默认参数要写在参数列表的最后)
    • 如果函数同时有声明、实现,默认参数只能放在函数声明中
    • 默认参数的值可以是常量、全局符号(全局变量、函数名)
  • 如果函数的实参 经常是同一个值,可以考虑使用默认参数
#include <iostream>
using namespace std;
const int age = 33;void test();void display(int a, int b = 22, int c = 33, void (*func)() = test);void test() {cout << "test()" << endl;
}void display(int a, int b, int c, void (*func)()) {cout << "a is : " << a << endl;cout << "b is : " << b << endl;cout << "c is : " << c << endl;func();
}
int main() {display(11);return 0;
}
  • 函数重载、默认参数可能会产生冲突、二义性(建议优先选择默认参数)
    在这里插入图片描述

4、extern ‘‘C’’

  • 被extern ‘’C’’ 的代码会按照C语言的方式去编译
    在这里插入图片描述

  • 如果函数同时有声明和实现,要让函数声明被extern '‘C’'修饰,函数实现可以不修饰
    在这里插入图片描述

  • 由于C、C++编译规则不同,在C、C++混合开发时,可能会出现C++在调用C语言的API时,需要extern ‘‘C’’ 修饰C语言函数声明
    在这里插入图片描述

  • 有时也会在编写C语言代码中直接适用extern ‘‘C’’,这样就可以直接被C++调用
    在这里插入图片描述
    在这里插入图片描述

  • 通过使用宏 __cplusplus来区分C、C++环境

5、#pragma once

  • 我们经常使用#ifndef、#define、#endif来防止头文件的内容被重复包含
  • #pragma once可以防止整个文件的内容被重复包含
    • #ifndef、#define、#endif受C、C++标准的支持,不受编译器的任何限制
    • 有些编译器不支持#pragma once(较老的编译器不支持,如GCC3.4版本之前),兼容性不够好
    • #ifndef、#define、#endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件

6、内联函数(inline function)

  • 适用inline修饰函数声明或者实现,可以使其编程内联函数(建议声明和实现都添加inline修饰)
  • 特点
    • 编译器会将函数调用直接展开为函数代码
    • 可以减少函数调用的开销
    • 会增大代码体积
  • 注意
    • 尽量不要内联超过10行代码的函数
    • 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数
  • 内联函数与宏的区别
    • 内联函数和宏,都可以减少函数调用的开销
    • 对比宏,内联函数多了语法检测和函数特性

7、表达式

  • C++的有的表达式是可以被赋值的
    在这里插入图片描述

8、const

  • const是常量的意思,被修饰的变量不可修改
  • 如果修饰的是类、结构体(的指针),其成员也不可更改
    在这里插入图片描述
  • const修饰的是其右边的内容

9、引用

  • 在C语言中,适用指针可以间接获取、修改某个变量的值
  • 在C++中,适用引用可以起到跟指针类似的功能
    在这里插入图片描述
  • 注意点
    • 引用相当于变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
    • 对引用做计算,就是对引用所指向的变量做计算
    • 在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
    • 可以利用引用初始化另一个引用,相当于某个变量名的多个别名
    • 不存在引用的引用,纸箱引用的指针,引用数组
  • 引用存在的价值之一:比指针更安全、函数返回值可以被赋值
  • 引用的本质是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
  • 一个引用占用一个指针的大小

10、常引用(Const reference)

  • 引用可以被const修饰,这样就无法通过引用来修改数据了,可以称为常引用
  • const 必须写在&符号的左边,才能算是常引用
  • const引用的特点
    • 可以指向临时数据(常量、表达式、函数返回值)
    • 可以指向不同类型的数据
  • 作为函数参数时(此规则也适用于const指针)
    • 可以接受const和非const实参(非const引用,只能接受非const实参)
    • 可以跟非const引用构成重载
  • 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
  • 数组引用的两种常见写法
    在这里插入图片描述

11、常用的汇编

  • AT&T汇编 VS Intel汇编
    在这里插入图片描述
  • x64汇编寄存器
    在这里插入图片描述
    在这里插入图片描述
  • x64汇编常用指令
    在这里插入图片描述
    在这里插入图片描述

12、变量地址总结

  • 一个变量的地址,是它所有字节地址中的最小值

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

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

相关文章

【论文笔记】NeuRAD: Neural Rendering for Autonomous Driving

原文链接&#xff1a;https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场&#xff08;NeRF&#xff09;应用在自动驾驶中&#xff0c;可以创建可编辑的场景数字克隆&#xff08;可自由编辑视角和场景物体&#xff09;&#xff0c;以进行仿真。但目前的方法或者需要大量的训…

java开发面试:常见业务场景之单点登录SSO(JWT)、权限认证、上传数据的安全性的控制、项目中遇到的问题、日志采集(ELK)、快速定位系统的瓶颈

单点登录&#xff08;SSO&#xff09; 单点登录&#xff0c;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统。 如果是单个tomcat服务&#xff0c;session可以共享&#xff0c;如果是多个tomcat&#xff0c;那么服务s…

python的函数编程

1、找出100&#xff5e;300中所有的挛生素数。挛生素数是指相差2的素数对&#xff0c;如了和5、5和7、11和13等。函数prime的功能是判断n是否力素数&#xff0c;用True表示是素数&#xff0c;用False表示非素数。 2、求&#xff08;123.910) (6162. 6970&#xff09;的和(用自…

Jenkins 构建触发器指南

目录 触发远程构建 (例如&#xff0c;使用脚本) 描述 配置步骤 安全令牌 在其他项目构建完成后触发构建 描述 配置步骤 定时触发构建 描述 配置步骤 GitHub钩子触发GITScm轮询 描述 配置步骤 Poll SCM - 轮询版本控制系统 描述 触发远程构建 (例如&#xff0c;使…

R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息

Package cli version 3.6.2 cli_warn(message, ..., .envir parent.frame()) 参数【message】&#xff1a;它是通过调用 cli_bullets() 进行格式化的。进一步地&#xff0c;还需要调用 inline-makeup&#xff08;内联标记&#xff09;。 参数【...】&#xff1a;传递给 rlan…

泽攸科技SEM台式扫描电子显微镜

泽攸科技是一家国产的科学仪器公司&#xff0c;专注于研发、生产和销售原位电镜解决方案、扫描电镜整机、台阶仪、探针台等仪器。目前台式扫描电镜分为三个系列&#xff1a;ZEM15、ZEM18、ZEM20。 ZEM15台式扫描电镜&#xff1a; ZEM18台式扫描电镜&#xff1a; ZEM20台式扫描…

【SpringMVC】SpringMVC的请求与响应

文章目录 0. Tomcat环境的配置1. PostMan工具介绍创建WorkSpace建立新的请求 2. 请求映射路径案例结构与代码案例结构案例代码 案例存在问题解决方案方法方法升级版——配置请求路径前缀注解总结 3. Get请求与Post请求案例结构与案例代码案例结构案例代码 Get请求Post请求接收中…

JS模块化规范之ES6及UMD

JS模块化规范之ES6及总结 前言ES6模块化概念基本使用ES6实现 UMD(Universal Module Definition)总结 前言 ESM在模块之间的依赖关系是高度确定的&#xff0c;与运行状态无关&#xff0c;编译工具只需要对ESM模块做静态分析&#xff0c;就可以从代码字面中推断出哪些模块值未曾被…

ICC2:Less than minimum edge length和Concave convex edge enclosure

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 首先,要介绍一下这两种drc Less than minimum edge length对应的tf rule如下: 而Concave convex edge enclosure对应图示和tf 规则如下,可

数据管理平台Splunk Enterprise本地部署结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

pip 常用指令 pip list 命令用法介绍

&#x1f4d1;pip 常用命令归类整理 pip list 是一个用于列出已安装的 Python 包的命令。这个命令会显示出所有已安装的包&#xff0c;以及它们的版本号。 pip list 命令有以下参数 -o, --outdated&#xff1a;列出所有过时的包&#xff0c;即有新版本可用的包。-u, --uptod…

【Chrome】ERR_SSL_PROTOCOL_ERROR问题

文章目录 前言一、下载二、使用步骤总结 前言 Edge升级最新版后&#xff0c;有的https访问不了&#xff0c;报如下错误 发现新版Chrome以及Chromium内核访问nginx ssl时报错&#xff0c;顺着这个思路接着查看到大佬的结论&#xff1a;服务器nginx使用的openssl版本过低&#…

智能感知时代已来,汉威科技柔性传感器迎来发展新机遇

近年来&#xff0c;消费电子、医疗健康、智能汽车、人机交互等领域的黑科技产品不断出现&#xff0c;催生了许多新功能、新场景、新市场。 TWS耳机&#xff1a;许多TWS&#xff08;真无线立体声&#xff09;耳机厂商开始摒弃传统的触摸感应模式&#xff0c;转而采用最先进的压…

ISA95 及工业互联网平台

ISA95简称S95&#xff0c;是美国仪表、系统和自动化协会&#xff08;ISA&#xff09;在95年提出来的&#xff0c;也是这个协会启动编制的第95个标准项目。它定义了企业商业和控制系统之间的集成&#xff0c;主要可以分成三个层次&#xff1a; 第0&#xff0c;1&#xff0c;2层…

亚马逊云科技-如何缩容/减小您的AWS EC2根卷大小-简明教程

一、背景 Amazon EBS提供了块级存储卷以用于 EC2 实例&#xff0c;EBS具备弹性的特点&#xff0c;可以动态的增加容量、更改卷类型以及修改预配置的IOPS值。但是EBS不能动态的减少容量&#xff0c;在实际使用中&#xff0c;用户也许会存在此类场景&#xff1a; 在创建AWS EC2…

Kafka 分级存储在腾讯云的实践与演进

导语 腾讯云消息队列 Kafka 内核负责人鲁仕林为大家带来了《Kafka 分级存储在腾讯云的实践与演进》的精彩分享&#xff0c;从 Kafka 架构遇到的问题与挑战、Kafka 弹性架构方案类比、Kafka 分级存储架构及原理以及腾讯云的落地与实践四个方面详细分享了 Kafka 分级存储在腾讯云…

JFreeChart 生成图表,并为图表标注特殊点、添加文本标识框

一、项目场景&#xff1a; Java使用JFreeChart库生成图片&#xff0c;主要场景为将具体的数据 可视化 生成曲线图等的图表。 本篇文章主要针对为数据集生成的图表添加特殊点及其标识框。具体包括两种场景&#xff1a;x轴为 时间戳 类型和普通 数值 类型。&#xff08;y轴都为…

maven限制内存使用峰值/最大内存

前言 通过设置虚拟机的内存大小&#xff0c;达到限制maven内存使用峰值的效果 方法1&#xff1a;修改mvn脚本 找到mvn脚本在MAVEN_OPTS参数值添加-Xms、-Xmx参数&#xff1a;MAVEN_OPTS"$MAVEN_OPTS -Xms512m -Xmx512m"效果图 windows系统下修改MAVEN_OPTS参数 …

解锁高效工作!5款优秀工时管理软件推荐

工时管理&#xff0c;一直是让许多企业和团队头疼的问题。传统的纸质工时表、复杂的电子表格&#xff0c;不仅操作繁琐&#xff0c;还容易出错。幸好&#xff0c;随着科技的进步&#xff0c;我们迎来了工时管理软件的春天。今天&#xff0c;就让我们一起走进这个新时代&#xf…

iconfont拓展iview图标库

文章目录 前言1.如何下载图标&#xff1f;首先进入官网&#xff0c;找属于自己需求的图标&#xff0c;添加到购物车2.点击右上角的购物车&#xff0c;会来到此页面&#xff0c;点击下载代码3.下载完成后&#xff0c;是一个压缩包&#xff0c;文件内容如下4.在项目assets下新建一…