问题标签 [auto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6720 浏览

c++ - 在 C++11 中使用 auto 和 decltype

我正在尝试学习当前接受的 c++11 功能,但我在使用 auto 和 decltype 时遇到了问题。作为一项学习练习,我正在使用一些通用函数扩展 std 类列表。

对于成员映射,我希望返回类型是通用的,具体取决于传递的函数返回的内容。所以对于返回类型,我可以做这样的事情。

这还需要删除函数模板中的浮点类型。

我可以使用模板类,但这会使实例的使用更加冗长,因为我必须指定返回类型。

总而言之,我试图弄清楚如何在不使用模板类的情况下定义地图,并且仍然在它返回的类型中具有通用性。

0 投票
15 回答
51333 浏览

c++ - C++11 auto 关键字太多了?

我一直在使用autoC++11 标准中提供的 new 关键字来处理复杂的模板类型,我相信它就是为此而设计的。但我也将它用于以下方面:

更怀疑的是:

我没有看到太多关于这个话题的讨论。似乎这auto可能会被过度使用,因为类型通常是文档和完整性检查的一种形式。您在哪里划定使用界限auto以及此新功能的推荐用例是什么?

澄清一下:我不是在寻求哲学观点;我要求标准委员会对该关键字的预期用途,可能会评论如何在实践中实现该预期用途。

0 投票
5 回答
4029 浏览

c++ - auto 和 decltype 的关系

相当于

或者

或者都不是?

0 投票
6 回答
88246 浏览

c++ - 新关键字“auto”;什么时候应该使用它来声明变量类型?

可能重复:
C++0x 自动关键字多少是太多了

我们(作为一个社区)是否有足够的经验来确定汽车何时和/或是否被滥用?

我真正在寻找的是最佳实践指南

  • 何时使用自动
  • 什么时候应该避免

在 80% 的情况下可以快速遵循的简单经验法则。

作为上下文,这个问题是由我在这里的回答引发的

0 投票
1 回答
35761 浏览

c++ - C++11 auto:如果它得到一个常量引用怎么办?

请看下面的简单代码:

我试着这样使用auto

我预计这my_foo将是Foo对函数的返回类型的常量引用。但是,类型autoFoo,而不是参考。此外,my_foo是通过复制创建的g_temp。这种行为对我来说并不那么明显。

为了获得对 的引用Foo,我需要这样写:

问题:为什么auto将返回类型推断GetFoo为对象,而不是引用?

0 投票
8 回答
159313 浏览

c++ - C++ 自动关键字。为什么是魔法?

从我用来学习 C++ 的所有材料中,auto一直是一个奇怪的存储持续时间说明符,没有任何用途。但就在最近,我遇到了将它本身用作类型名称的代码。出于好奇,我尝试了它,它假定我碰巧分配给它的类型!

突然之间,STL 迭代器以及任何使用模板的东西都变得更容易编写了 10 倍。感觉就像我在使用像 Python 这样的“有趣”语言。

我的一生都在哪里?你会说它是视觉工作室独有的还是不便携的,这会打破我的梦想?

0 投票
4 回答
31072 浏览

c++ - 在 lambda 函数中使用 auto

编译后,上面的示例开始错误输出,如下所示:

这是否意味着该关键字auto不应该在 lambda 表达式中使用?

这有效:

为什么带有 auto 关键字的版本不起作用?

0 投票
1 回答
895 浏览

c++ - 在模板函数中使用 auto 和 decltype

我一直在尝试使用自动返回类型模板并且遇到了麻烦。我想创建一个接受 STL 映射并返回对映射中索引的引用的函数。我从这段代码中遗漏了什么以使其正确编译?

(注意:我假设地图可以用 0 的整数赋值来初始化。我可能会在稍后添加一个 boost 概念检查以确保它被正确使用。)

调用此函数的代码示例如下:

0 投票
3 回答
7972 浏览

c++ - lambda 中的递归调用 (C++11)

可能重复:
c++0x 中的递归 lambda 函数

如果我把它写成,为什么我不能递归地调用 lambda:

它给出了编译错误(ideone):

错误是什么意思?

我明白我不能写这个的原因:

我们不能这样写,因为必须从它的初始化中推断出类型,这意味着如果它本身出现在初始化(ideone)中i,就无法推断出类型。但是在 lambda 的情况下有什么关系呢?如果我没记错的话,lambda 的类型是由它的参数和返回类型决定的;如果它不返回任何内容,则它不依赖于主体(在这种情况下,无论 lambda-body 中的其他语句如何,都将返回类型推导出为 )。ivoid

无论如何,我有一个解决方法,我可以使用std::function

编译罚款(ideone)。但我仍然有兴趣知道该auto版本无法编译的原因。

0 投票
2 回答
143 浏览

c++ - 引用引起的意外复制构造:我做错了什么?

我有一些复杂的模板代码,其中的复制构造函数OPC被调用,即使我只是创建一个引用OPC(实际实例是OP_S,它作为 的子类OPC,不应该导致复制构造调用)。

我正在使用 gcc 4.6.1

代码如下。

答案如下 James McNellis 所述 - 需要auto&而不是auto.