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

c++ - C++/V8 调用非静态函数/创建临时实例的便捷方式

我正在寻找一种方法来解决这个问题(可行):

变成这样

我试过:

但它不起作用。

[@Xeo]

这是V8的这个类。

http://bespin.cz/~ondras/html/classv8_1_1HandleScope.html


如果你投反对票,至少解释一下你为什么这样做。

0 投票
2 回答
6962 浏览

c++ - 对临时与返回值优化的 const 引用

我知道将右值分配给 const 左值引用会延长临时对象的生命周期直到作用域结束。但是,我不清楚何时使用它以及何时依赖返回值优化。

根据 Scot Meyers 的“更有效的 C++”(第 20 项),编译器可以优化第二种方法以在适当的位置构造对象(这将是理想的,并且正是const&第一种方法试图实现的目标)。

  1. 是否有任何普遍接受的规则或最佳实践何时用于const&临时人员以及何时依赖 RVO/NRVO?
  2. 会不会有使用const&方法比不使用更糟糕的情况?(我正在考虑例如 C++11 移动语义,如果LargeObject有那些实现的话......)
0 投票
8 回答
266 浏览

c++ - 按值返回总是 const 吗?

此代码无法编译:

行中的编译错误(GCC 4.1.2)foo(bar())

从“C”类型的临时对象对“C&”类型的非常量引用进行无效初始化

bar()返回一个mutable对象时,它应该编译......
为什么 C++ 不允许上面的代码?


编辑:我在所有答案中总结了所有好主意的答案;-)

0 投票
4 回答
20610 浏览

c++ - 为什么不是对临时对象的非常量引用?

可能重复:
const 引用是否会延长临时对象的寿命?
延长临时工的寿命

C++ 只允许将临时对象分配给 const 引用。它不允许分配临时对象来引用。

例如:

我到处搜索这个结果,我只看到以下答案

  1. 修改临时对象会导致无法识别的问题
  2. 修改临时对象是危险的
  3. 在某些时候,你会忘记它是一个临时变量

据说,声明后临时对象消失了。所以你不应该修改它。

如果 C++ 如此热衷于阻止修改临时对象,它应该阻止读取临时对象吧?如果临时对象消失了,那么从那里读取内容没有意义吗?可能发生权利的情况也可能涉及读取。

那为什么它一直阻止单独写入并允许读取?

请给我一个可靠的 C++ 代码解释。

请不要通过指出一些替代方案来偏离问题。请用代码给我一个可靠的答案,为什么允许 const int & 并且不允许 int & 用于临时对象。

一个说 && 在那里.. 我的问题不同.. 另一个说,改变不会反映.. 即使它是 const int & 也不会反映。例如:双a;常量 int & i = a; 一个++;不会影响我。。

0 投票
2 回答
770 浏览

c++ - 寿命延长和条件运算符

local lvalue references-to-const 和 rvalue references 可以延长临时对象的生命周期:

当初始化器不是一个简单的表达式而是使用条件运算符时,这是否也有效?

如果其中一个结果是临时对象,而另一个不是呢?

当条件为假时,C++ 是否要求延长临时的生命周期?

在回答这个关于不可复制对象的问题时出现了这个问题。

0 投票
4 回答
107 浏览

c++ - 对对象和取消引用的指针感到困惑

我不明白传递对象实例与传递取消引用对象之间的区别。我有

上面的调用不适用于编译器错误:

但如果我写

确实如此。

如果我无法更改要调用的方法,谁能告诉我为什么以及如何解决问题?

0 投票
3 回答
425 浏览

c++ - 临时ostream对象的c ++问题

我想转换这个工作代码:

进入这个:

换句话说,我使用了 ofstream 对象的“匿名”或未命名版本。

两个问题:

(1) 为什么第二次尝试失败?

(2) 第二次尝试在风格上是否更好,或者在 C++ 中明确命名所有内容是否更好?我来自 Python 背景,一直在动态创建对象。

谢谢!!

0 投票
7 回答
1476 浏览

c++ - pIter != cont.end() 在 for 循环中的性能

我最近正在阅读 Herb Sutter 的“Exceptional C++”,我对他在第 6 项 - 临时对象中给出的特定建议表示严重怀疑。

他提出在以下代码中查找不必要的临时对象:

作为示例之一,他建议emps.end()在循环之前预先计算 的值,因为每次迭代都会创建一个临时对象:

对于大多数容器(包括列表),调用 end() 返回一个必须构造和销毁的临时对象。因为值不会改变,所以在每次循环迭代中重新计算(以及重建和重新销毁)它既不必要地低效又不美观。该值应该只计算一次,存储在本地对象中并重复使用。

他建议替换为以下内容:

对我来说,这是不必要的复杂化。即使有人用 compact 替换了丑陋的类型声明auto,他仍然得到两行代码而不是一行。更重要的是,他end在外部范围内有这个变量。

我确信现代编译器无论如何都会优化这段代码,因为我实际上const_iterator在这里使用并且很容易检查循环内容是否以某种方式访问​​容器。编译器在过去 13 年里变得更聪明了,对吧?

无论如何,在大多数情况下,我会更喜欢第一个版本i != emps.end(),我不太担心性能。但我想确定的是,这是否是一种我可以依靠编译器来优化的结构?

更新

感谢您对如何使这个无用的代码变得更好的建议。请注意,我的问题是关于编译器,而不是编程技术。目前唯一相关的答案来自NPEEllioh

0 投票
1 回答
576 浏览

java - 如何将 JMS 队列视为临时存储?

我希望能够从队列中提取和插入消息。是否可以为此利用 JMS 功能,或者我是否需要为此创建自定义数据结构?

请让我知道是否有任何其他特定的临时存储设计模式。

更新:由于许多人要求更多细节,所以在这里。我的要求是将消息存储在一个队列中,多个客户端可以从中推送数据,并在需要时从其中拉回数据。该队列应该可供多个客户端使用。一条消息只应处理一次,如果客户端无法处理数据,则消息应返回队列。

0 投票
2 回答
137 浏览

c++ - C++ - base implementation called through reference of derived?

Consider following code (minimal version):

This actually produces 'base' when using latest MinGW g++! Is that a compiler bug or am I missing something? Could someone test this in VS please?

I consider myself an experienced C++ programmer, constantly using polymorphism, stack-based references, temporary objects (C++ standard 12.2) etc. Therefore I know that lifetime lengthening should be applied.

This behaviour only occurs when defining a destructor in Base (virtual or not) and using a temporary, i. e. following usage produces 'derived':