C/C++11 语法/概念易错总结(1)

文章目录

  • 缺省参数
  • 函数重载
  • 引用
  • 引用和指针
  • 内联
  • 宏的优缺点
  • auto
  • 范围for
  • NULL和nullptr

缺省参数

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
void Func(int a, int b = 10, int c = 20){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}
  1. 缺省参数不能在函数声明和定义中同时出现
  2. 缺省值必须是常量或者全局变量

函数重载

C++函数重载至少要满足,函数的返回值、函数的参数个数、函数的参数类型、函数不同参数类型的顺序至少有一个不一样 ;

原理:

生成可执行程序需要经过:预处理、编译、汇编、链接 四个阶段 。
在C语言专用的编译器中在: C语言 ——> 汇编代码 这个过程将函数名直接转为汇编代码 ;
而C++专用的编译器中在:C/C++语言 ——> 汇编代码 这个过程将函数名经过修饰转为汇编代码,Linux g++ 编译器修饰的方法为(不同的平台、编译器有不同的修饰方法,但都能支持C++重载的条件):

_Z+函数长度+函数名+类型首字母

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

引用

  1. 引用在定义时必须初始化;
  2. 引用一旦引用一个实体,再不能引用其他实体;
  3. 引用只能引用变量 ;
  4. 传引用返回要保证引用对象没有被销毁 (函数在运行结束后,函数生命周期内定义的变量的空间就会归还给操作系统处理);
  5. 能用引用传参和传返回值尽量用,因为不用拷贝运行效率更高;
  6. 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的

引用和指针

引用和指针的不同点:

  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
    (在汇编代码层面原理相同)
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  4. 没有NULL引用,但有NULL指针
  5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
    位平台下占4个字节)
  6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  7. 有多级指针,但是没有多级引用
  8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  9. 引用比指针使用起来相对更安全

内联

  1. 内联是一种建议,编译器不一定采用
  2. 使用内联函数,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率
  3. 内联函数定义和声明不要分离,因为展开是指函数体的展开,分离会导致链接错误,inline被展开,就没有函数地址了,链接就会找不到;

宏的优缺点

优点:
提高代码的可读性和可维护性:宏可以将一系列重复的代码片段封装起来,使代码更加简洁和易于理解。
增加代码的灵活性:宏可以根据不同的参数生成不同的代码,使代码具有更强的适应性和灵活性。
提高代码的复用性:宏可以在不同的地方多次使用,避免了重复编写相同的代码。
提高代码的效率:宏在编译时会被展开,不会引入额外的函数调用开销,可以在一定程度上提高代码的执行效率。

缺点:
宏的使用容易出错:宏展开后的代码可能会与预期不符,容易引入难以发现的错误。
宏的调试困难:宏在编译时展开,调试时无法直接查看宏展开后的代码,增加了调试的难度。
宏的可读性较差:宏展开后的代码可能会变得冗长和难以理解,降低了代码的可读性。
宏的滥用可能导致代码的可维护性下降:过度使用宏可能会导致代码的可维护性下降,增加了代码的复杂性和难度。

C++有哪些技术替代宏?

  1. 常量定义 换用const enum
  2. 短小函数定义 换用内联函数

auto

  1. 编译器在编译期会将auto替换为变量实际的类型
  2. 用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须
    加&
  3. 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错
  4. auto不能作为函数的参数
  5. auto不能直接用来声明数组

范围for

范围for的使用条件:

  1. 容器或数组必须是一个可迭代的对象,即它必须实现了begin()和end()方法,用于返回迭代器指向容器或数组的起始和结束位置。

  2. 迭代器类型必须支持解引用操作,以便可以访问容器或数组中的元素

  3. 对于数组,range-based for循环会自动推导出数组的大小,并使用索引来遍历数组的每个元素。

  4. 对于数组需要知道范围

void TestFor()  // 正确
{
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array)e *= 2;
for(auto e : array)cout << e << " ";
return 0;
}void TestFor(int array[])  // 错误
{for(auto& e : array)cout<< e <<endl;
}

for循环原理:

编译器会根据range-based for循环的语法,将其转换为一个普通的for循环。对于容器类型,编译器会调用容器的 begin() 和 end() 方法来获取容器的起始和结束迭代器。这些迭代器用于遍历容器中的元素。对于数组类型,编译器会自动推导出数组的起始和结束位置,并使用索引来遍历数组的每个元素。在每次迭代中,编译器会将当前元素赋值给循环变量,然后执行循环体内的代码。

NULL和nullptr

  1. NULL是宏,定义为 ((void*)0) , nullptr为关键字
  2. nullptr和NULL所占空间相同

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

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

相关文章

一些ab命令

1.ab简介 ab是apache自带的压力测试工具&#xff0c;是apachebench命令的缩写。ab非常实用&#xff0c;它不仅可以对apache服务器进行网站访问压力测试&#xff0c;也可以对或其它类型的服务器如nginx、tomcat、IIS等进行压力测试。 ab的原理&#xff1a;ab命令会创建多个并发…

在编程中遇到的问题总结

IDEA空包粘黏问题 创建好目录以后会发现idea自动将空包合并在一起了&#xff0c;而且点击设置里面也没有Compact Middle Package Compact Middle Package如果不在设置的主面板上&#xff0c;则点击Tree Appearance&#xff0c;会发现Compact Middle Package在Tree Appearance里…

elupload base64

创作灵感也许就是这会儿还没有入睡吧&#xff0c;对接百度图片OCR功能&#xff0c;需要将图片转为BASE64上传调用百度的接口api&#xff0c;进行研究实现。页面如下&#xff0c;点击后选择图片文件后不是直接上传&#xff0c;而是获取图片的bytes数据&#xff01; <el-uploa…

IO / day01 作业。

1.使用fgets统计一个文件的行号 //使用fgets统计一个文件的行号#include <string.h> #include <stdlib.h> #include <stdio.h>int main(int argc, const char *argv[]) {if(argc<2) //获取文件名{printf("input error\n!");printf("usage…

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析&#xff1a; 此类问题需要用到lag或lead函数取上下行对应的数据&#xff0c;然后对前后结果做比较打标签&#xff08;0或1&#xff09;&#xff0c;再…

pycharm中绘制一个3D曲线

import numpy as np import matplotlib.pyplot as plt # 中文的设置 import matplotlib as mp1 from mpl_toolkits.mplot3d import Axes3D mp1.rcParams["font.sans-serif"] ["kaiti"] mp1.rcParams["axes.unicode_minus"] False # 数据创建 X…

基于SSM的经典电影推荐网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

解决VSCode按住Ctrl(or Command) 点击鼠标左键不跳转的问题(不能Go to Definition)

问题出现 往往在升级了VSCode以后&#xff0c;就会出现按住Ctrl&#xff08;or Command&#xff09; 点击鼠标左键不跳转的问题&#xff0c;这个问题很常见。 解决办法 1 进入VScode的首选项&#xff0c;选择设置 2 输入Go to definition&#xff0c;找到如下两个设置&#…

熬夜会秃头——beta冲刺Day3

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day3团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

【算法】单调栈题单——字典序最小⭐(一种类型的模板题)

文章目录 题目列表316. 去除重复字母⭐⭐⭐⭐⭐&#xff08;类型题模板&#xff1a;单调栈&#xff0c;字典序最小&#xff09;221021天池-03. 整理书架&#xff08;保留数量为 limit 的字典序最小&#xff09;402. 移掉 K 位数字&#xff08;最多删除 k 次 前导零的处理&…

springboot + vue 智能物流管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

『 Linux 』环境变量

文章目录 &#x1f680;什么是环境变量&#x1f680;&#x1f680;查看环境变量&#x1f680;&#x1f579;️和环境变量有关的命令&#x1f579;️ &#x1f680;PATH环境变量&#x1f680;&#x1f579;️设置PATH环境变量&#x1f579;️ &#x1f680;HOME环境变量&#x1…

三、C语言常见概念

目录 1. C语言是什么&#xff1f; 3. 编译器的选择 3.1 编译和链接 3.2 编译器的对比 6. main函数 7. printf 和 库函数 8. 关键字介绍 8.1 什么是预编译&#xff1f; 8.2 static 的关键词作用&#xff1f; 8.3 const 的作用 8.4 voliate 的作用 8.5 typedef 的作用…

【MATLAB源码-第93期】基于matlab的白鲸优化算法(BWO)和鲸鱼优化算法(WOA)机器人栅格路径规划对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 白鲸优化算法&#xff08;BWO&#xff09; 白鲸优化算法是受到白鲸捕食和迁徙行为启发的一种算法。其主要特点和步骤包括&#xff1a; 1. 搜索食物&#xff08;全局搜索&#xff09;&#xff1a;算法模仿白鲸寻找食物的行为。…

执行npm run dev报Error: error:0308010C:digital envelope routines::unsupported问题

vue2element-ui项目&#xff0c;在执行npm run dev的时候突然报错&#xff1a; (node:19424) [DEP0111] DeprecationWarning: Access to process.binding(http_parser) is deprecated. (Use node --trace-deprecation ... to show where the warning was created) Er…

神策数据荣获 36 氪「WISE2023 未来商业之王 企业服务领域年度企业」

11 月 28 日&#xff0c;36 氪 WISE2023 商业之王大会举办。大会上&#xff0c;WISE2023 年度企业重磅发布&#xff0c;聚焦发掘推动产业发展、为经济增长提供创新动能的企业。神策数据作为专业的大数据分析和营销科技服务提供商&#xff0c;在数百家企业中脱颖而出&#xff0c…

避免客户开发信被限制的方法与策略

开发信是外贸或者出海企业常用的一种开发客户的方式。相较于其他的获客方式&#xff0c;开发信能够更加精准地投放到客户中&#xff0c;并且只需承担较低的成本。但是&#xff0c;由于一些限制管制要求&#xff0c;外贸人员可能会遇到开发新被限制的情况。今天&#xff0c;小编…

WebUI自动化学习(Selenium+Python+Pytest框架)005

基础知识学习完毕&#xff0c;接下来我们开始学习测试框架啦&#xff01;&#xff01;&#xff01; 首先来回顾一下python自带的Unittest框架&#xff1a; Python基础学习016__UnitTest-CSDN博客文章浏览阅读97次。Testcase:测试用例:这个测试用例是UnitTest的组成部分,不是手…

基于SpringBoot校园周边美食探索及分享平台的设计与实现

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0c…

【Linux系统化学习】揭秘 命令行参数 | 环境变量

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 代码仓库&#xff1a;Gitee 目录 命令行参数 环境变量 PATH 查看PATH $PWD 查看环境变量PWD $HOME 查看系统支持的环境变量 获取环境变量 命令行参数 在C/C编程语言中我们有一个…