有什么理由在 C++03 中使用“auto”关键字吗?

2023-12-03

Note这个问题最初发布于 2009 年,在 C++11 被批准之前,在auto关键字发生了很大的变化。提供的答案涉及onlyC++03 的含义auto-- 这是指定的存储类 -- 而不是 C++11 的含义auto——这是自动类型推导。如果您正在寻找有关何时使用 C++11 的建议auto,这个问题与那个问题无关。

在很长一段时间里,我认为没有理由使用staticC 中的关键字,因为在块作用域之外声明的变量是隐式全局的。然后我发现将变量声明为static在块作用域内将给它永久的持续时间,并且在块作用域之外(在程序作用域中)声明它将给它文件作用域(只能在该编译单元中访问)。

因此,这只剩下一个我(可能)尚未完全理解的关键字:auto关键词。除了“局部变量”之外,它还有其他含义吗?无论您想在何处使用它,它所做的任何事情都不是隐式为您完成的吗?如何auto变量在程序范围内的行为?什么是一个static auto文件范围内的变量?该关键字是否还有其他目的只是为了完整性而存在?


在 C++11 中,auto具有新的含义:它允许您自动推断变量的类型。

为什么它有用?让我们考虑一个基本的例子:

std::list<int> a;
// fill in a
for (auto it = a.begin(); it != a.end(); ++it) {
  // Do stuff here
}

The auto那里创建了一个类型的迭代器std::list<int>::iterator.

这可以使一些非常复杂的代码更容易阅读。

另一个例子:

int x, y;
auto f = [&]{ x += y; };
f();
f();

在那里,auto推导了在变量中存储 lambda 表达式所需的类型。 维基百科有很好的对该主题的报道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么理由在 C++03 中使用“auto”关键字吗? 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 如何为spark-submit添加资源jar?

    我的spark应用程序依赖于adam 2 11 0 20 0 jar 每次我都必须将我的应用程序与adam 2 11 0 20 0 jar打包为fat jar以提交到spark 例如我的fat jar是myApp1 adam 2 11 0
  • 以编程方式运行 MSBuild

    我正在尝试以编程方式执行 MSBuild 但无法执行以下命令 string command string Format C Windows Microsoft NET Framework v4 0 30319 msbuild exe 0 1
  • 如何使用 Jersey 2 测试框架为此类编写单元测试

    我正在尝试为 Rest api 调用编写单元测试 该调用具有 POST 方法 用于使用 Jersey2 将视频文件添加到基于 Web 的应用程序 这是我的类方法的签名 TemplateController java 我想为其编写单元测试 P
  • Hibernate MSSQL datetime2 映射

    我有一个存储过程 它返回数据库中数据类型为 datetime2 Java 文件中数据类型为 Date 的列 当我尝试对从数据库获取的时间调用 getTime 时 它返回 19994321211 毫秒 相当于 IST 2015 年 5 月 4
  • 如何使用 fwrite 将结构写入文件?

    我对 C 很陌生 并且在使用 fwrite 时遇到了麻烦 我正在寻找使用一个包含两个值的结构 struct keyEncode unsigned short key 2 unsigned short encoded 2 然后我在 main
  • 如何使用 Jax-RS 返回 Java List Json

    我想知道如何让方法返回 List 的 JSON 数组 例如 GET Produces application json public List
  • 使用 SQLAlchemy 表达式时 Dask read_sql_table 出错

    我正在尝试将 SQLAlchemy 表达式与 dask 的 read sql table 结合使用 以获取通过连接和过滤几个不同表创建的数据集 这文档表明这应该是可能的 下面的示例不包含任何联接 因为不需要它们来复制问题 我构建连接字符串
  • Facebook JS 影响 IE 中的 CSS/@font-face?

    我似乎注意到 Facebook 的 JS div div 似乎影响了我网站在 IE 中的 CSS 例如 假设标题使用 font1 正文使用 font2 有时 在 IE 中 所有字体都使用 font1 甚至交换 标题使用 font2 正文使用
  • 运行 selenium 时如何将参数传递给 google chrome?

    我希望能够在运行 selenium 时将参数传递给 google chrome 我怎样才能做到这一点 当我运行 selenium 时 我使用 Java 命令 Java jar selenium jar 如何将 no sandbox igno
  • 如何从 iOS 应用程序中将视频上传到 YouTube? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 在我的 iOS 应用程序中
  • 如何使用 python 从包含数千个文件的目录中复制前 100 个文件?

    我有一个巨大的目录 并且一直在更新 我试图使用 python 仅列出目录中最新的 100 个文件 我尝试使用 os listdir 但是当目录大小接近 1 00 000 个文件时 listdir 似乎崩溃了 或者我没有等待足够长的时间 我只
  • HashMap 中的键是否存在检查

    检查 HashMap 中的键是否存在总是必要的吗 我有一个包含 1000 个条目的 HashMap 我正在考虑提高效率 如果HashMap的访问非常频繁 那么每次访问时都检查键是否存在将导致很大的开销 相反 如果密钥不存在并因此发生异常 我
  • 如何在 ASP.NET MVC 中禁用会话状态?

    我想要一个非常轻量级的 ASP NET MVC 站点 其中包括删除尽可能多的常用 HttpModule 并禁用会话状态 但是 当我尝试执行此操作时 出现以下错误 The SessionStateTempDataProvider requir
  • 如何在 PHP 中第 n 次出现针时分割字符串?

    必须有一种快速有效的方法来在针的 第 n 次出现处分割 文本 字符串 但我找不到它 里面的功能还是比较齐全的PHP手册中的strpos注释 但这对于我的需要来说似乎有点多了 我有纯文本作为 string并想将其拆分为nth的发生 needl
  • 构造函数 ProcessBuilder(String, String, String) 未定义

    在同一个 IDE Eclipse 中 我有两个项目都有 ProcessBuilder builder new ProcessBuilder cmd exe c command 但在项目一中它没有显示编译错误 但在项目二中它显示编译错误两个
  • 在 Qt 中处理非常大的图像

    我无法让 Qt 处理超过 10 000X10 000 的图像 我正在处理每张大约 2GB 的巨大卫星图像 我考虑过使用内存映射 但图像仍然占用内存空间 QFile file c qt a ras file open QIODevice Re
  • python webbrowser.open(url)

    httpd make server 80 server webbrowser open url httpd serve forever 这可以跨平台工作 除非我在 putty ssh 终端上启动它 我如何欺骗控制台在单独的进程中打开 w3m
  • 为什么原始 numpy 数组在更改从它创建的另一个数组时会发生变化?

    我有一个 numpy 数组r当我用来创建另一个数组时r2从中取出并转动该新阵列r2为零它也改变了原始数组r 我搜索了类似的问题 但没有找到任何令人满意的答案 所以请考虑提出一个合适的答案 原始数组 gt gt gt r array 0 1
  • 从 python 程序中禁用哈希随机化

    从Python 3 3开始 哈希算法是非确定性的salted以避免某种攻击 这对于网络服务器来说很好 但在尝试调试程序时却很痛苦 每次运行脚本时 字典内容都会以不同的顺序迭代 一些早期版本的 python 有一个 R标记为enabling哈
  • 有什么理由在 C++03 中使用“auto”关键字吗?

    Note这个问题最初发布于 2009 年 在 C 11 被批准之前 在auto关键字发生了很大的变化 提供的答案涉及onlyC 03 的含义auto 这是指定的存储类 而不是 C 11 的含义auto 这是自动类型推导 如果您正在寻找有关何