问题标签 [emplace]
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++ - 将 emplace_back 与 unique_ptrs 容器一起使用是否安全?
考虑以下:
如果向量中发生重新分配,并且失败(抛出std::bad_alloc
),我是“安全”还是会泄漏int
?
C++11 23.3.6.5 [vector.modifiers]/1 说:
如果除复制构造函数、移动构造函数、赋值运算符或移动赋值运算符之外的
T
任何InputIterator
操作引发异常,则没有任何影响。
这似乎表明这是一个潜在的问题。也就是说,如果“没有效果”,那么就不会构造任何东西,因此不会发生unique_ptr
依赖于该指针的析构函数行为。delete
(这可能表明emplace_back
应该禁止unique_ptr
s 的容器)
c++ - 安置一个 POD
是否可以使用 POD 进行安置?它似乎在 Visual Studio 2012 中不起作用:
这只是 Visual Studio 2012 的一个缺点,还是在 C++11 中放置 POD 根本不起作用?
c++ - 在 C++ 地图中插入 vs emplace vs operator[]
我第一次使用地图,我意识到有很多方法可以插入元素。您可以使用emplace()
, operator[]
or insert()
, 以及使用value_type
or之类的变体make_pair
。虽然有很多关于所有这些的信息和关于特定案例的问题,但我仍然无法理解大局。所以,我的两个问题是:
他们每个人比其他人有什么优势?
是否需要在标准中添加 emplace?没有它,有什么是不可能的吗?
c++11 - 何时使用 emplace* 以及何时使用 push/insert
我知道容器上的 emplace 函数的一般概念(“就地构造新元素”)。
我的问题不是它的作用,而是更像是有效的 C++11 之一。
什么是决定何时使用(例如何时使用std::vector
)
emplace_back()
和何时使用push_back()
以及一般 emplace* 与“旧”插入函数的好规则?
c++ - 有没有办法设置返回值?
版本 2总是比版本 1快。
事实是,getRange()
被多个类使用。如果我要应用版本 2,将会有很多代码重复。
还有,我不能通过ranges
作为对 的非常量引用传递getRange()
,因为其他一些类使用 astd::stack
而不是 a std::vector
。我将不得不创建多个重载并有更多的代码重复。
有没有一种通用的方法/习惯来取代返回值?
c++11 - D 中的就职
D 有类似于 C++11 的东西emplace_back()
吗?当我将单个或多个结构附加到数组或其他具有其成员的值语义的 D 容器的末尾时,我通常想要这个?
更新:我想这是正确的答案?: http: //dlang.org/phobos/std_conv.html#.emplace
我仍然认为它与质疑 emplace 的需求有关,因为 D 对内存有更严格的控制 - 在上面提到的情况下,是否可以通过巧妙的编译器优化来淘汰对 emplace 的需求?
c++ - 插入具有没有复制构造函数的对象的向量
我有一个类,其复制构造函数被显式删除(因为 A 在内部使用指针,我不想陷入浅拷贝陷阱):
现在我有一个类型的向量,vector<A> aVector;
我想在其中插入元素 - 所以我使用emplace_back
:
但是,这无法使用 gcc 进行编译,并且出现错误 -
这个错误的原因是什么?如何在不删除复制构造函数的情况下修复它?我需要一个移动构造函数 - 是否需要显式定义?
c++ - RVO,移动语义和优化代码的斗争
如果我理解正确,移动语义允许从临时的、未命名的对象中移动和重用资源。RVO,尽管前面的移动语义走得更远,“窃取”了整个对象,以避免额外的构造函数调用和赋值/复制函数。
这对我来说似乎有点反直觉,如果被调用的构造函数直接使用最终左值目标的地址来直接将数据放置在用户需要的地方,那不是更快、更简单和用户明显吗?
我的意思是,“在这个位置创建这个对象”似乎比“在某个地方创建这个对象,然后将它复制到正确的位置”更直观一些。
c++ - 包含另一个向量(部分向量)的向量 emplace_back 用法(C++11)
有没有人知道这种 emplace_back 用法(C++11)的相关参考?