问题标签 [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 投票
1 回答
1036 浏览

c++ - 自动类型说明符

我刚刚了解了自动类型说明符,并尝试在一个非常简单的代码中使用它

运行时,此代码给出一个错误,提示“警告:'auto' 在 C++11 中改变含义;请删除它。

这里有什么问题?

0 投票
2 回答
1424 浏览

c++ - 为什么 C++0x 返回类型中的 Lambda 函数必须是自动的?

0 投票
5 回答
28648 浏览

c++ - 如何使用 auto 声明数组

我一直在玩,auto我注意到在大多数情况下,您可以将变量定义替换为auto然后分配类型。

在下面的代码中wx是等效的(默认初始化int,但不要进入潜在的副本)。有没有办法声明z它具有与 相同的类型y

0 投票
1 回答
496 浏览

c++ - 通过迭代器从字符串中删除空格到 C++11 基于范围的 for 循环中的字符串

我只是想使用 C++11 的基于范围的 for 循环从字符串中删除所有空格;但是,我继续std::out_of_range前进basic_string::erase

所以我想知道:i前两个循环到底是什么?为什么它看起来既是 a char(由 验证typeid)又是iteratora to a char(与 一起使用std::string::erase)?为什么它不等同iterator于最后一个循环?在我看来,它们的功能应该完全相同。

0 投票
3 回答
35717 浏览

c++ - C++11 基于范围的 for 循环效率“const auto &i”与“auto i”

在 C++11 中,我可以像这样迭代一些容器:

但我知道这是不必要的 -不必要的,因为我只需要打印-的值就vec可以复制(编辑:每个元素)vec,所以我可以这样做:

但我想确保 的值vec永远不会被修改并遵守 const 正确性,所以我可以这样做:

所以我的问题是:如果我只需要查看某个容器的值,const auto &i由于没有额外副本(编辑:每个元素)的效率提高,是否总是首选最后一个循环()vec

我有一个正在开发的程序,我正在考虑在整个过程中进行这种更改,因为效率在其中至关重要(我首先使用 C++ 的原因)。

0 投票
2 回答
196 浏览

c++ - 自动循环和优化

您能解释一下为什么使用以下代码(未优化)的计算时间存在如此大的差异。我怀疑 RVO 与移动构造,但我不太确定。

一般来说,遇到这种情况时的最佳做法是什么?初始化非 POD 数据时,循环中的自动声明是否被视为不好的做法?

在循环内使用 auto :

输出 :

./a.out 0.17s user 0.00s system 97% cpu 0.177 total

循环外的向量实例:

输出 :

./a.out 0.32s user 0.00s system 99% cpu 0.325 total

0 投票
3 回答
383 浏览

c++ - 返回值语法重载 const 而不是 const 函数

我在使用新的返回值语法为 const 而不是 const getter 函数提供正确重载时遇到问题。

在我的课堂PhysicalNode上,我用新的返回值语法定义了一个 getter 函数。这是必需的,因为 getter 的返回类型取决于成员的类型。

但是,我现在还想将此方法提供为 const。

通常我会使用函数重载来定义我的 const 而不是像那样的 const getter 函数。

我尝试了以下函数声明,但它不起作用:

编译错误是:

我需要如何定义函数声明才能将此函数定义为常量。

0 投票
1 回答
581 浏览

c++ - 在函数模板中推断迭代器类型?

我试图在一个函数中推断出迭代器的类型,该函数已经用模板推断出参数的类型。我想要实现的是替换在C++11标准中具有类似功能的关键字auto 。最初我有以下功能:

这适用于C++11标准的完美编译。但是事情发生了变化,我不能再使用这些功能了。

我正在尝试在没有关键字auto的情况下实现相同的功能。所以我想到了模板。

到目前为止,我尝试的是这样的:

你会怎么解决这个问题?

注意:我通常用以下类型调用这个函数,

因为我必须实例化具有不同类型的向量。

0 投票
1 回答
1118 浏览

c++ - 为什么必须包括使用汽车?

关于 SO已经有一个类似的问题,但我想强调braced-init-lists 的另一个方面。考虑以下:

除非包含标题,否则这是格式错误的 (8.5.4/2) <initializer_list>。但为什么?标准说,模板std::initializer_list不是预定义的。这是否意味着声明 (1) 引入了一种新类型?在所有其他情况下,auto可以使用的地方,例如

whereexpr是一个表达式,自动推导的类型已经存在。另一方面,从逻辑的角度来看,编译器必须为构造分配一个隐式类型{1}std::initializer_list然后是另一个名称。但在声明 (1) 中,我们不想命名这种类型。那么为什么必须包含此标头。也有类似的情况nullptr。它的类型隐含存在,但要明确命名它,您必须包含<cstddef>.

0 投票
4 回答
2024 浏览

c++ - 为什么 auto 不能用于重载函数?

我知道 usingtemplates是一种受欢迎的重载方式,但我想知道为什么auto不能用于函数参数类型推导从而帮助函数重载?

N3690在 7.6.1.4/3 中说 lambda 表达式可以使用 auto 进行泛型,提供这个例子

(注意:N3485中没有提到这个)

1).为什么我不能为正常功能做类似的事情,例如

这给出了错误error : parameters declared auto

从 N3690 7.1.6.4/4

使用 auto 或 decltype(auto) 声明的变量的类型是从其初始化程序推导出来的。在块 (6.3)、命名空间范围 (3.3.6) 和 for-init-statement (6.5.3) 中声明变量时,允许使用此用法。[...]

我是否错误地假设param1andparam2属于块范围并因此有资格自动扣除?

2)。如果允许这样的功能,会有什么陷阱?

我正在使用 gcc 4.8.1。

谢谢