初识C++(二)内联函数、atuo、以及范围for的使用

Transformer 面试题及详细答案120道(1-10)-- 基础概念 本文总结了Transformer模型的10个常见面试问题及答案,涵盖了其核心结构、创新点、工作机制等关键知识点。主要内容包括:Transformer的自注意力机制和多头注意力机制创新点,相比RNN/CNN的优势,模型在《Attention Is All You Need》论文中的提出背景,以及Encoder-Decoder协同工作流程等。重点解析了位置编码的作用、长距离依赖处理能力、与传统注意力机制的区别等核心问题。每个问题都给出了简明扼要的专业解答,适合作为Transformer相关面试准备的参考资料。 阅读详情

内联函数

1.概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。

2.特性

  1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。
    在这里插入图片描述

  2. inline对于编译器来说知识一个建议,编译器会自动优化,也就是说,即使你用了内联函数后,编译器也不一定会将其编译为内联,如果定义的inline的函数体有循环/递归等,编译器优化时会忽略掉内联。

  3. inline不能声明和定义分离,也就是说不能将其放在.h和.c文件中,如果分离的话会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。
    示例:

// F.h
#include <iostream>
using namespace std;
inline void f(int i);
// F.cpp
#include "F.h"
void f(int i) {
 cout << i << endl; }
// main.cpp
#include "F.h"
int main()
{
 f(10);
 return 0; }
// 链接错误:main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl f(int)" (?
f@@YAXH@Z),

常考的面试题

由于我们在学习c语言的时候,学习到了宏,在学习了内联函数之后,就会觉得二者是有一些关联的(因为宏也是一些操作简便的功能)

宏的优缺点?
优点:
1.增强代码的复用性。
2.提高性能。
缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查 。

所以c++呢,是可以用内联函数代替宏的,一些变量呢也是可以用const来代替#define的。

auto关键字(C++11)

1.auto简介

在早期的c/c++中auto的含义是:使用auto修饰的变量,是具有自动储存器的局部变量,但是一直很少有人去使用它。
所以在c++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。简单点说,它可以根据变量,而自动生成变量的类型。

int TestAuto()
{
 return 10; }
int main()
{
 int a = 10;
 auto b = a;
 auto c = 'a';
 auto d = TestAuto();
 
 cout << typeid(b).name() << endl;
 cout << typeid(c).name() << endl;
 cout << typeid(d).name() << endl;
 
 //auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化
 return 0; }

使用时注意

和引用一样,使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为
变量实际的类型。

2.auto的使用细则

1.auto与指针和引用结合起来使用
用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&

int main()
{
 int x = 10;
 auto a = &x;
 auto* b = &x;
 auto& c = x;
 cout << typeid(a).name() << endl;
 cout << typeid(b).name() << endl;
 cout << typeid(c).name() << endl;
 *a = 20;
 *b = 30;
 c = 40;
 return 0;
 }

2.在同一行定义多个变量
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对
第一个类型进行推导,然后用推导出来的类型定义其他变量。

void TestAuto()
{
 auto a = 1, b = 2; 
 auto c = 3, d = 4.0; // 该行代码会编译失败,因为c和d的初始化表达式类型不同
}

不能使用auto的场景

1.auto不能作为函数的参数

// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导
void TestAuto(auto a)
{}

2.atuo不能用来声明数组

void TestAuto()
{
 int a[] = {1,2,3};
 auto b[] = {4,5,6};
}

3.C++11只保留了auto最初用法的作为指示符使用
4.使用范围for的时候可以用auto,而且后期使用范围for可以更方便遍历vector,string,list等含有迭代器的类。

3.范围for的使用

1.范围for的语法

在c++中如果要读写遍历一个数组,可以使用范围for进行操作

void TestFor()
{
 int array[] = { 1, 2, 3, 4, 5 };
 for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
 array[i] *= 2;
 
 for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)
 cout << *p << endl;
 }

在这里插入图片描述
图片的操作只能读,并不能写,如果要实现写,就要在e前加一个&。

2.范围for的使用条件

  1. for循环迭代的范围必须是确定的
    对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的
    方法,begin和end就是for循环迭代的范围。
    注意:以下代码就有问题,因为for的范围不确定
void TestFor(int array[])
{
 for(auto& e : array)
 cout<< e <<endl;
}

文章的最后nullptr和NULL的使用

你只需要记住以后c++都用nullptr就可以了

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码) uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd 阅读详情

相关推荐

生物信息学工具链搭建:用conda一键搞定MCScanX所有依赖(Ubuntu20.04实测)

本文详细介绍了在Ubuntu20.04系统上使用conda一键部署MCScanX及其所有依赖的高效方法,解决了传统源码编译安装中的依赖冲突问题。通过conda环境管理工具,研究者可以快速搭建生物信息学工具链,实现基因组共线性分析的高效运行,显著提升研究效率。

backprop5master的博客 247

For循环

For循环 for循环,使一些循环结构变得更加简单 for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

weiyoo55的博客 362

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 267

内联函数与auto关键字,范围for循环

内联函数: 内联函数的概念: 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。(内联函数替换在编译时,存在类型检测,宏替换在预处理阶段,没有类型检测)。 inline int Add(int left, int right) { return left+right; } 内联函数具有文件作用域,只能在当...

weixin_44862316的博客 327

Arduino--土壤湿度传感器使用(电阻式)

最近买了一个土壤湿度检测传感器,实物图是这样的: 我买这个模块是想要得到土壤湿度的模拟量。但我买的时候忘了买左边的蓝色模块,我开始以为这个模块是有运放功能的,但实际它是一个电压比较器和一个分压电路。 其模块的接线如图: 该模块的四线是带模拟量输出的,三线的只输出一个到达阈值的标志量。该模块的原理图如下: 该模块的测试原理为:把土壤当成一个可变电阻,随着土壤含水量的增加,土壤电阻减小。而该传感器其实就是两个电极,用来接土壤这个可变电阻。一般湿度的土壤电阻大概在几百K左右,其串连的分压电阻应该在这个数量级。

weixin_41866783的博客 1万+

CPP11新特性——基于范围的for循环

范围for的语法 在C++98中如果要遍历一个数组,可以按照以下方式进行 void TestFor() { int array[] = { 1, 2, 3, 4, 5 }; for(int i = 0, i < sizeof(array) / sizeof(array[0]); ++i) array[i] += 2; for(int* p = 0, p < array + sizeof(array) / sizeof(array[0]); ++p) cout << *

Jack_zhangpengfei的博客 1692

C++版Cesium实战:从OpenGL到3DTiles的全流程开发指南

本文提供了一份C++版Cesium全流程开发指南,详细阐述了如何利用OpenGL和Qt从零构建高性能、可离线部署的三维GIS应用。内容涵盖开发环境搭建、OpenGL渲染引擎初始化、Cesium核心坐标系与场景管理移植,并重点解析了3DTiles数据的解析、异步加载与渲染优化等硬核实战技术,旨在帮助开发者实现与现有C++工业软件的深度集成。

weixin_28077113的博客 165

56 CPP基于范围的for循环

1)迭代的范围可以是数组名、容器名、初始化列表或者可迭代的对象(支持begin()、end()、++、==)。3)如果容器中的元素是结构体和类,迭代器变量应该申明为引用,加const约束表示只读。对于一个有范围的集合来说,在程序代码中指定循环的范围有时候是多余的,还可能犯错误。2)数组名传入函数后,已退化成指针,不能作为容器名。C++11中引入了基于范围的for循环。for (迭代的变量 : 迭代的范围)56 CPP基于范围的for循环。4)注意迭代器失效的问题。

wade1010的专栏 357

27930-2015+充电协议解析

对2015+充电与2015充电进行硬件电路对比、通信协议对比和2015+通信协议解析。

manjixingkong1234的专栏 238

手把手教你完成YOLOv11 PySide6目标检测界面搭建,使用Qt6设计YOLOv11检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv11 与 PySide6,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。系统功能有:目标检测程序实现图片/视频/摄像头检测,AI 问答界面(deepseek大模型接口,流式输出)、退出登录、界面保存登录状态、个人信息修改等

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 7015

C++进阶 —— 范围for(C++11新特性)

范围for;

NapoleonCoder的博客 2299

基于STM32L4XX、HAL库的MCP4561数字电位器驱动程序设计

/ HAL库需要左移一位。* @param address: 设备地址(0x2C-0x2F)* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hi2c: I2C句柄。

zhusl6688的博客 341

【C++杂货铺】内联函数、auto、范围for、nullptr

本文介绍了C++入门知识:内联函数、auto、范围for、nullptr

春人.的博客 5636

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

初识C++(二)引用,内联函数,auto

接收的是引用的返回值的拷贝,从而避免直接持有悬空引用,但 func 函数的设计本身是有问题的,因为它返回了对局部变量的引用(局部变量已经被销毁)以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。在本例中,当TestFunc2被调用,并且以A&(结构体A的引用)作为参数时,它实际上是直接操作原有的对象a,而不是创建一个新的拷贝。

2301_80215560的博客 1579

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【C++】内联函数、auto、范围for

内联函数、auto关键字与范围for的介绍

weixin_69380220的博客 1585

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

初识C++(4) 内联函数 auto

auto的价值在于自动推导和替换一些类型很长复杂的变量return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;auto定义变量时必须初始化,编译器会自动根据初始化表达式推导实际类型,你可以这样理解auto,auto并不是一种类型的声明,而是一个类型的占位符,编译器会自动将auto替换为实际类型。

jia_DL34的博客 1699

C++入门:内联函数,auto,范围for循环,nullptr

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

qq_72916130的博客 1902

【C++修行之路】引用、内联函数、auto关键字、范围for循环

c++入门之引用、内联函数、auto关键字、范围for循环

m0_73209194的博客 6402

内联函数 auto 基于范围for循环 空指针nullptr

因为inline被展开,就没有函数地址了,链接就会 找不到。这就是为什么f(NULL)和f(0)的结果是一样,而nullptr解决了这个问题。要开辟空间消耗栈要花蛮多时间,而内联函数不要开辟和消耗栈,以空间换时间的处理方式。,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,让我们一起学习C++知识叭,如果有错误,可以指点指点我噢。(和其他循环一样,可以用break停止,也可以用continue)了,导致在main中没有声明,所以报错。很像,都是在编译时调用的地方展开,

rwh04160416的博客 1924

【C++】初识C++(2)

引用不是新定义⼀个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同⼀块内存空间。格式: 类型& 引用别名=引用对象;

2401_85054434的博客 1766

【C++】概念引入二:内联函数、auto、范围for、nullptr

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

寒雒的博客 827

初识C++(二)

C++入门(二)

QYJN123456的博客 1373

【C++】内联函数、auto关键字、基于范围的for循环、指针空值nullptr

本篇文章是进入类和对象学习的前一课,也是最后一些与大家交代的C++入门知识,大家可以收藏下方便记忆。

℉f的博客 793

初识C++(下)——“C++”

初识西嘎嘎完结文章

weixin_74957752的博客 700

【C++】内联函数&&auto&&范围for循环&&nullptr

本篇文章讲解的主要内容是内联函数,重点讲解了内联函数的用途以及特性;另外我们还讲解了C++11中的一些新的语法特性。

malloc不出对象的博客 1793
上一篇: 初识c++(一)
下一篇: C++类和对象你真的听懂了吗?来,看完这篇保姆级类和对象教程,保证你在学校杀疯——上篇
CodeApe_
博客等级 码龄5年 138粉丝 5原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeApe_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值