问题标签 [temporary-objects]

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 投票
2 回答
3398 浏览

c++ - 非常量引用绑定到临时的 Visual Studio 错误?

我在编译一些可移植代码时遇到了这个问题gcc。基本上这个奇怪的代码在 Visual Studio 中编译,这真的让我大吃一惊:

Visual studio让这个飞起来。gcc会将其捕获为编译错误。有趣的是,如果你 typedef Zebra 为 int,VC++会报错。相当矛盾的行为。想法?

0 投票
3 回答
3961 浏览

java - 如何使用临时变量交换两个以上的变量

我试图弄清楚如何使用临时变量交换两个以上的变量。有 4 个变量要交换,1,2,3 和 4。变量 1 是与 2 交换、2 与 3、3 与 4 和 4 与 1 交换。看起来很简单,但我只学会了如何交换两个变量如此,并且正在与更大的规模作斗争。我试过了

我需要多个临时变量吗?仍然只有初学者任何帮助将不胜感激!

编辑:对不起,忘记添加我正在为 java 编码。

0 投票
5 回答
7451 浏览

c++ - 将构造函数传递给函数

我正在使用一个 STL 向量,它是一个参数向量。

我试图找到一种在不这样做的情况下将 Parameter 对象添加到向量的方法:

我遇到了一个这样做的实现:

我认为当我创建一个对象时,构造函数被调用,反之亦然。为什么我可以将构造函数传递给函数?

0 投票
2 回答
1941 浏览

c++ - 对临时对象的 const 引用在函数范围(生命周期)之后被破坏

在问这个问题时,我了解到对临时对象的 const 引用在 C++ 中是有效的:

但在下面的示例中, const 引用refnop指的是已销毁的临时对象。我想知道为什么?

使用 GCC 4.1.2 和 MSVC 2010 测试,它返回 4;

ref和之间的区别在于实际上什么都不做refnop的调用。nothing()似乎在这个调用之后,临时对象被破坏了!

我的问题:
为什么在 的情况下refnop,临时对象的生命周期与其 const 引用不同?

0 投票
2 回答
7702 浏览

c++ - 临时延长寿命

该标准的第 12.2.5 节说:

临时绑定到函数调用 (5.2.2) 中的引用参数将一直持续到包含调用的完整表达式完成为止。在函数返回语句 (6.6.3) 中对返回值的临时绑定将持续存在,直到函数退出。在所有这些情况下,在初始化引用的表达式的求值过程中创建的临时对象,除了引用绑定的临时对象,在创建它们的完整表达式的末尾被销毁,并且与完成他们的建设。

我试图理解以下代码:

在线#1创建一个临时对象并将其绑定到fooRef. fooRef在线销毁#0。我认为应该在这里销毁临时文件,因为生命周期扩展不是传递的。

问题:

  1. 是什么until the function exits意思?这是什么意思untill it finished executing

  2. 为什么我得到一个5输出。临时对象是否仍然存在在线#2

  3. 我如何解释标准报价以了解此示例的工作原理?

非常感谢参考标准的逐步原子演练。谢谢!

PS这里接受的答案还告诉代码是broken我不明白,为什么我会得到这样的程序输出。

0 投票
1 回答
986 浏览

c++ - 优化可变与不可变向量数学

哪种编码风格更适合编译器优化?特别是,我对 1) 最小化立即丢弃的临时值的数量和 2) 自动矢量化(即生成用于算术的 SIMD 指令)感兴趣。

假设我有这个结构:

此结构的示例用法:

这是可变的方法。

另一种不可变的方法可能如下所示:

示例用法:


现在,我不关心这个问题中的 API 设计。假设这两种解决方案在这方面都是可行的。

此外,代替int示例代码,它可以是floatdouble也可以。

我感兴趣的是:现代 C++ 编译器更容易分析哪种设计?我并不是特别针对任何单个编译器。如果您有任何编译器的经验并且知道它如何处理我所询问的优化,请分享您的经验。

  • 第二个版本产生了很多临时值。如果编译器最终内联所有运算符调用并看到其中包含的所有算术表达式,编译器能否摆脱这些?(我假设没有内联没有编译器可以消除临时因为可能的副作用)

  • 第一个版本最小化了临时变量的数量,但构建了严格的顺序计算。编译器是否仍然可以推断出意图并以最小化操作数量并允许并行化(在 CPU 指令级别)的方式对操作重新排序?

  • 现代编译器对上述循环进行矢量化有多难?

0 投票
1 回答
288 浏览

java - 跨所有实例在 appengine 上存储对象列表

我在 Google App Engine 上有一个应用程序。它处理实时数据而不考虑过去的数据(因此没有数据存储/完全持久性),因此在实例崩溃或新部署的情况下我不需要任何非常可靠的东西来恢复数据。

由于负载,我有多个实例需要共享一个对象列表。我查看了 memcached,但这需要映射样式界面中从键到对象的映射,而不能转储所有条目。

此外,我希望使条目过期,除非“碰撞”,尽管这可以在用户代码中处理。

什么是不涉及数据存储的合理解决方案?我希望它能够处理来自多个应用程序引擎实例的并发读取和写入(这就是为什么简单的 Java 对象声明不起作用,因为它是每个实例的)。

Memcached 可能存储单个对象,但它需要获取对象、获取某种锁、修改它并将其写回缓存。

注意 现有应用程序引擎数据存储中存在不相关的数据。

澄清:我需要所有的实体。实体本身可以随时修改、过期或半自动删除或从头开始创建。我不是特别能够前往计费后端。

编辑:是的,它适用于本地存储的单个列表,但我预计需要多个实例的峰值。尽管我不介意同步延迟,但我至少需要一种尽力而为的方法来获取完整列表。但是,没有后端的所有实例之间的循环通信将相对不可扩展,并且我将更多地陷入租用服务器的场景中。

我不在乎在另一个前端实例上提交更改后更改是否不会立即完成。然而,这些变化需要 100% 确定地通过。我只看到 lastSeen 值(long)增加的插入和更新。更新也应该在所有实例上复制或反映。

注意:由于当时的情况,我无法授予赏金,因此我无法控制赏金已退还。我会在可能的情况下重新添加。

0 投票
1 回答
690 浏览

c++ - 函数声明而不是在 C++ 中调用构造函数

我希望在这里初始化 B 的对象,但我得到了函数声明:

输出为:对'b'中的成员'test'的请求,它是非类类型'B(A( *)())'*

为什么在这种情况下不调用构造函数?

0 投票
5 回答
307 浏览

c++ - 临时对象并通过 (const/non-const) `value`

临时对象的生命周期持续到使用时创建它的表达式的完整长度without references

考虑以下:

据我了解,在上述情况下,编译器会创建一个temporary对象(类型)来保存返回值。const My而且,我正在尝试修改临时对象。

(1)编译良好并且

(2)导致编译时错误并出现以下错误:

error: passing 'const My' as 'this' argument of void My::increment() discards qualifiers

这意味着基本上this是类型My而不是函数const My调用它non-const

我的问题:

我正在尝试const My通过调用non-const成员函数来修改类型的临时对象。

那么为什么我在 case(1) 中没有得到相同的错误,因为 const My在这两种情况下我都在操作该类型的对象。

我知道这与return type函数有关,但我无法完全理解,因为最后归结为 function( void My::increment()),它试图const My在这两种情况下修改临时类型。

0 投票
1 回答
80 浏览

c++ - VS2010:临时对象不能绑定到非常量引用

我开始知道Temporaries不能绑定到非常量引用。

呼吁fun生产不是临时的吗?为什么临时可以挂在non-const reference这里。我无法理解为什么这个编译很好。

编辑:我正在使用 VS2010。我不明白这该怎么办。