问题标签 [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.
c++ - 在 C++11 中使用 auto 和 decltype
我正在尝试学习当前接受的 c++11 功能,但我在使用 auto 和 decltype 时遇到了问题。作为一项学习练习,我正在使用一些通用函数扩展 std 类列表。
对于成员映射,我希望返回类型是通用的,具体取决于传递的函数返回的内容。所以对于返回类型,我可以做这样的事情。
这还需要删除函数模板中的浮点类型。
我可以使用模板类,但这会使实例的使用更加冗长,因为我必须指定返回类型。
总而言之,我试图弄清楚如何在不使用模板类的情况下定义地图,并且仍然在它返回的类型中具有通用性。
c++ - C++11 auto 关键字太多了?
我一直在使用auto
C++11 标准中提供的 new 关键字来处理复杂的模板类型,我相信它就是为此而设计的。但我也将它用于以下方面:
更怀疑的是:
我没有看到太多关于这个话题的讨论。似乎这auto
可能会被过度使用,因为类型通常是文档和完整性检查的一种形式。您在哪里划定使用界限auto
以及此新功能的推荐用例是什么?
澄清一下:我不是在寻求哲学观点;我要求标准委员会对该关键字的预期用途,可能会评论如何在实践中实现该预期用途。
c++ - auto 和 decltype 的关系
是
相当于
或者
或者都不是?
c++ - 新关键字“auto”;什么时候应该使用它来声明变量类型?
可能重复:
C++0x 自动关键字多少是太多了
我们(作为一个社区)是否有足够的经验来确定汽车何时和/或是否被滥用?
我真正在寻找的是最佳实践指南
- 何时使用自动
- 什么时候应该避免
在 80% 的情况下可以快速遵循的简单经验法则。
作为上下文,这个问题是由我在这里的回答引发的
c++ - C++11 auto:如果它得到一个常量引用怎么办?
请看下面的简单代码:
我试着这样使用auto
:
我预计这my_foo
将是Foo
对函数的返回类型的常量引用。但是,类型auto
是Foo
,而不是参考。此外,my_foo
是通过复制创建的g_temp
。这种行为对我来说并不那么明显。
为了获得对 的引用Foo
,我需要这样写:
问题:为什么auto
将返回类型推断GetFoo
为对象,而不是引用?
c++ - C++ 自动关键字。为什么是魔法?
从我用来学习 C++ 的所有材料中,auto
一直是一个奇怪的存储持续时间说明符,没有任何用途。但就在最近,我遇到了将它本身用作类型名称的代码。出于好奇,我尝试了它,它假定我碰巧分配给它的类型!
突然之间,STL 迭代器以及任何使用模板的东西都变得更容易编写了 10 倍。感觉就像我在使用像 Python 这样的“有趣”语言。
我的一生都在哪里?你会说它是视觉工作室独有的还是不便携的,这会打破我的梦想?
c++ - 在 lambda 函数中使用 auto
编译后,上面的示例开始错误输出,如下所示:
这是否意味着该关键字auto
不应该在 lambda 表达式中使用?
这有效:
为什么带有 auto 关键字的版本不起作用?
c++ - 在模板函数中使用 auto 和 decltype
我一直在尝试使用自动返回类型模板并且遇到了麻烦。我想创建一个接受 STL 映射并返回对映射中索引的引用的函数。我从这段代码中遗漏了什么以使其正确编译?
(注意:我假设地图可以用 0 的整数赋值来初始化。我可能会在稍后添加一个 boost 概念检查以确保它被正确使用。)
调用此函数的代码示例如下:
c++ - lambda 中的递归调用 (C++11)
可能重复:
c++0x 中的递归 lambda 函数
如果我把它写成,为什么我不能递归地调用 lambda:
它给出了编译错误(ideone):
错误是什么意思?
我明白我不能写这个的原因:
我们不能这样写,因为必须从它的初始化中推断出类型,这意味着如果它本身出现在初始化(ideone)中i
,就无法推断出类型。但是在 lambda 的情况下有什么关系呢?如果我没记错的话,lambda 的类型是由它的参数和返回类型决定的;如果它不返回任何内容,则它不依赖于主体(在这种情况下,无论 lambda-body 中的其他语句如何,都将返回类型推导出为 )。i
void
无论如何,我有一个解决方法,我可以使用std::function
:
编译罚款(ideone)。但我仍然有兴趣知道该auto
版本无法编译的原因。
c++ - 引用引起的意外复制构造:我做错了什么?
我有一些复杂的模板代码,其中的复制构造函数OPC
被调用,即使我只是创建一个引用OPC
(实际实例是OP_S
,它作为 的子类OPC
,不应该导致复制构造调用)。
我正在使用 gcc 4.6.1
代码如下。
答案如下 James McNellis 所述 - 需要auto&
而不是auto
.