问题标签 [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.
c++ - C++/V8 调用非静态函数/创建临时实例的便捷方式
我正在寻找一种方法来解决这个问题(可行):
变成这样:
我试过:
但它不起作用。
[@Xeo]
这是V8的这个类。
http://bespin.cz/~ondras/html/classv8_1_1HandleScope.html
如果你投反对票,至少解释一下你为什么这样做。
c++ - 对临时与返回值优化的 const 引用
我知道将右值分配给 const 左值引用会延长临时对象的生命周期直到作用域结束。但是,我不清楚何时使用它以及何时依赖返回值优化。
根据 Scot Meyers 的“更有效的 C++”(第 20 项),编译器可以优化第二种方法以在适当的位置构造对象(这将是理想的,并且正是const&
第一种方法试图实现的目标)。
- 是否有任何普遍接受的规则或最佳实践何时用于
const&
临时人员以及何时依赖 RVO/NRVO? - 会不会有使用
const&
方法比不使用更糟糕的情况?(我正在考虑例如 C++11 移动语义,如果LargeObject
有那些实现的话......)
c++ - 按值返回总是 const 吗?
此代码无法编译:
行中的编译错误(GCC 4.1.2)foo(bar())
:
从“C”类型的临时对象对“C&”类型的非常量引用进行无效初始化
当bar()
返回一个mutable
对象时,它应该编译......
为什么 C++ 不允许上面的代码?
编辑:我在所有答案中总结了所有好主意的答案;-)
c++ - 为什么不是对临时对象的非常量引用?
C++ 只允许将临时对象分配给 const 引用。它不允许分配临时对象来引用。
例如:
我到处搜索这个结果,我只看到以下答案
- 修改临时对象会导致无法识别的问题
- 修改临时对象是危险的
- 在某些时候,你会忘记它是一个临时变量
据说,声明后临时对象消失了。所以你不应该修改它。
如果 C++ 如此热衷于阻止修改临时对象,它应该阻止读取临时对象吧?如果临时对象消失了,那么从那里读取内容没有意义吗?可能发生权利的情况也可能涉及读取。
那为什么它一直阻止单独写入并允许读取?
请给我一个可靠的 C++ 代码解释。
请不要通过指出一些替代方案来偏离问题。请用代码给我一个可靠的答案,为什么允许 const int & 并且不允许 int & 用于临时对象。
一个说 && 在那里.. 我的问题不同.. 另一个说,改变不会反映.. 即使它是 const int & 也不会反映。例如:双a;常量 int & i = a; 一个++;不会影响我。。
c++ - 寿命延长和条件运算符
local lvalue references-to-const 和 rvalue references 可以延长临时对象的生命周期:
当初始化器不是一个简单的表达式而是使用条件运算符时,这是否也有效?
如果其中一个结果是临时对象,而另一个不是呢?
当条件为假时,C++ 是否要求延长临时的生命周期?
在回答这个关于不可复制对象的问题时出现了这个问题。
c++ - 对对象和取消引用的指针感到困惑
我不明白传递对象实例与传递取消引用对象之间的区别。我有
上面的调用不适用于编译器错误:
但如果我写
确实如此。
如果我无法更改要调用的方法,谁能告诉我为什么以及如何解决问题?
c++ - 临时ostream对象的c ++问题
我想转换这个工作代码:
进入这个:
换句话说,我使用了 ofstream 对象的“匿名”或未命名版本。
两个问题:
(1) 为什么第二次尝试失败?
(2) 第二次尝试在风格上是否更好,或者在 C++ 中明确命名所有内容是否更好?我来自 Python 背景,一直在动态创建对象。
谢谢!!
c++ - pIter != cont.end() 在 for 循环中的性能
我最近正在阅读 Herb Sutter 的“Exceptional C++”,我对他在第 6 项 - 临时对象中给出的特定建议表示严重怀疑。
他提出在以下代码中查找不必要的临时对象:
作为示例之一,他建议emps.end()
在循环之前预先计算 的值,因为每次迭代都会创建一个临时对象:
对于大多数容器(包括列表),调用 end() 返回一个必须构造和销毁的临时对象。因为值不会改变,所以在每次循环迭代中重新计算(以及重建和重新销毁)它既不必要地低效又不美观。该值应该只计算一次,存储在本地对象中并重复使用。
他建议替换为以下内容:
对我来说,这是不必要的复杂化。即使有人用 compact 替换了丑陋的类型声明auto
,他仍然得到两行代码而不是一行。更重要的是,他end
在外部范围内有这个变量。
我确信现代编译器无论如何都会优化这段代码,因为我实际上const_iterator
在这里使用并且很容易检查循环内容是否以某种方式访问容器。编译器在过去 13 年里变得更聪明了,对吧?
无论如何,在大多数情况下,我会更喜欢第一个版本i != emps.end()
,我不太担心性能。但我想确定的是,这是否是一种我可以依靠编译器来优化的结构?
更新
感谢您对如何使这个无用的代码变得更好的建议。请注意,我的问题是关于编译器,而不是编程技术。目前唯一相关的答案来自NPE和Ellioh。
java - 如何将 JMS 队列视为临时存储?
我希望能够从队列中提取和插入消息。是否可以为此利用 JMS 功能,或者我是否需要为此创建自定义数据结构?
请让我知道是否有任何其他特定的临时存储设计模式。
更新:由于许多人要求更多细节,所以在这里。我的要求是将消息存储在一个队列中,多个客户端可以从中推送数据,并在需要时从其中拉回数据。该队列应该可供多个客户端使用。一条消息只应处理一次,如果客户端无法处理数据,则消息应返回队列。
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':