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、变量地址总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何设计更优雅的 React 组件?

在日常开发中&#xff0c;团队中每个人组织代码的方式不尽相同。下面我们就从代码结构的角度来看看如何组织一个更加优雅的 React 组件&#xff01; 1. 导入依赖项 我们通常会在组件文件顶部导入组件所需的依赖项。对于不同类别的依赖项&#xff0c;建议对它们进行分组&#…

Django(二)

1.django框架 1.1 安装 pip install django3.21.2 命令行 创建项目 cd 指定目录 django-admin startproject 项目名mysite ├── manage.py [项目的管理工具] └── mysite├── __init__.py├── settings.py 【配置文件&#xff0c;只有一部分…

在Portainer创建Nginx容器并部署Web静态站点实现公网访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

大数据---34.HBase数据结构

一、HBase简介 HBase是一个开源的、分布式的、版本化的NoSQL数据库&#xff08;即非关系型数据库&#xff09;&#xff0c;依托Hadoop分布式文件系统HDFS提供分布式数据存储&#xff0c;利用MapReduce来处理海量数据&#xff0c;用Zookeeper作为其分布式协同服务&#xff0c;一…

虚拟机安装CentOS7并配置共享文件夹

一、虚拟机安装CentOS7并配置共享文件夹 二、CentOS 7 上hadoop伪分布式搭建全流程完整教程 三、本机使用python操作hdfs搭建及常见问题 四、mapreduce搭建 五、mapper-reducer编程搭建 六、hive数据仓库安装 一、虚拟机安装二、centos系统安装三、共享文件夹配置 一、虚拟机安…

C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# 方法

C# 入门基础知识 - 方法 第8节 方法8.1 C# 函数/方法简介8.2 方法的声明及调用8.2.1 参数列表方法的声明及调用8.2.2 参数数组方法的声明及调用8.2.3、引用参数与值参数 8.3 静态方法和实例方法8.3.1 静态、实例方法的区别8.2.3 静态、实例方法的声明及其调用 8.4 虚方法8.4.1 …

“智”绘出海新航道,亚马逊云科技携手涂鸦智能助力智能家居企业全球化

随着人工智能、5G等技术的快速发展&#xff0c;智能家居行业呈现高速发展的态势。Statista数据显示&#xff0c;2022年全球智能家居行业支出总值为1145亿美元&#xff0c;欧美地区以较早的智能家居普及率&#xff0c;率先进入全屋智能时代&#xff0c;其中欧盟区国家家用智能设…

大规模采用奇点临近?Web3应用爆发离不开这个“支撑”赛道

作者&#xff5c;Jason Jiang 数据是当今世界最具价值的资源&#xff0c;也是数字掘金的必争之地。尽管Web3迄今仍有诸多争议&#xff0c;但随着铭文、Gamefi、DeFi等链上生态的多样化发展&#xff0c;我们正身处Web3应用爆发的洪流之中&#xff0c;区块链数据赛道也因此备受关…

LLM微调(四)| 微调Llama 2实现Text-to-SQL,并使用LlamaIndex在数据库上进行推理

Llama 2是开源LLM发展的一个巨大里程碑。最大模型及其经过微调的变体位居Hugging Face Open LLM排行榜&#xff08;https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard&#xff09;前列。多个基准测试表明&#xff0c;就性能而言&#xff0c;它正在接近GPT-3.5…

vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程&#xff1a; Ⅰ、商品购物车作业需求&#xff1a;1、商品购物车页面示例&#xff1a;2、具体需求&#xff1a; Ⅱ、html 文件的构建&#xff1a;商品购物车.html Ⅲ、组件文件的构建&#xff1a;商品购物车1.js Ⅳ、小结&#xff1a; Ⅰ、商品购物车作业需求&am…

TypeScript实战——ChatGPT前端自适应手机端,PC端

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 可以在线体验哦&#xff1a;体验地址 文章目录 前言引言先看效果PC端手机端 实现原理解释 包的架构目录 引言 ChatGPT是由OpenAI开发的一种基于语言模型的对话系统。它是GPT&#xff08;…

Java智慧工地源码 SAAS智慧工地源码 智慧工地管理可视化平台源码 带移动APP

一、系统主要功能介绍 系统功能介绍&#xff1a; 【项目人员管理】 1. 项目管理&#xff1a;项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。 2. 人员信息管理&#xff1a;支持身份证及人脸信息采集&#…

重学设计模式-Iterator(迭代器模式)

Iterator迭代器模式 介绍&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它允许你在不暴露集合底层表示&#xff08;并不知道集合底层使用何种方式对数据尽心存储&#xff09;的情况下遍历集合中的元素。 这种模式提供了一种方法&#xff0c;可以顺序访问一个聚合…

Leetcod面试经典150题刷题记录 —— 矩阵篇

矩阵篇 1. 有效的数独2. 螺旋矩阵Python 3. 旋转图像Python额外开辟数组空间原地置换法 4. 矩阵置零5. 生命游戏Python 1. 有效的数独 题目链接&#xff1a;有效的数独 - leetcode 题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验…

管理层年终考核的四种方式

企业管理层是企业中的核心决策者&#xff0c;对企业的经营和发展有着重要的影响。因此&#xff0c;对企业管理层进行年终绩效环评可以更好地了解其对企业的贡献和影响&#xff0c;以便更好地激励和管理管理层&#xff0c;提高企业的绩效和效益。以下是适合管理层做年终考核的四…

华为 WATCH GT 4 跨越想象的边界,打造智慧生活新体验

颜值新高度&#xff0c;健康更全面&#xff01;华为 WATCH GT 4 颜值超能打&#xff0c;表盘随心定义&#xff0c;健康管理再升级身体状况更有数&#xff0c;超长续航给足安全感。跨越想象的边界&#xff0c;打造智慧生活新体验&#xff01;

众和策略股市行情分析:股市里什么叫外资?外资股是什么?

股市里什么叫外资&#xff1f; 外资就是指的国外本钱&#xff0c;即国外出资者参与到我国股市所投入的本钱。通常情况下&#xff0c;外资主要靠直接或直接持有我国股市的股票来达成注入本钱的意图。比较于内资&#xff0c;外资更多的注重于我国商场的整体情况&#xff0c;采用…

融资项目——vue之事件监听

vue通过v-on进行事件监听&#xff0c;在标签中使用v-on:xxx&#xff08;事件名称&#xff09;进行监听&#xff0c;事件触发的相应方法定义在Vue对象中的methods中。如下图所示&#xff1a; 上述代码对按钮进行监听&#xff0c;点击按钮后就会触发solve函数。

理解SpringMVC的工作流程

组件 前置控制器 DispatcherServlet。 映射控制器 HandlerMapping。 处理器 Controller。 模型和视图 ModelAndView。 视图解析器 ViewResolver。 工作流程 spring mvc 先将请求发送给 DispatcherServlet。 DispatcherServlet 查询一个或多个 HandlerMapping&#xff0c;找到…

Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作

一、iframe操作 iframe识别&#xff1a; 语法&#xff1a; driver.switch_to.frame(‘方式’) 1、常见处理方法三种 index&#xff1a;下标name&#xff1a;id或name属性的值webelement&#xff1a;元素 2、通过下标进入 进入第一个iframe&#xff1a; driver.switch_to.…