10得票1回答
C++1z中保证复制省略在列表初始化中是如何工作的?

在C++草案n4606 [dcl.init] 17.6中,有关于拷贝省略的段落: 如果目标类型是一个(可能带cv限定符的)类类型: - 如果初始化表达式是prvalue并且源类型的cv限定符版本与目标类型相同,则使用初始化表达式来初始化目标对象。【例如:T x = T(T(T())); 调用...

10得票2回答
vector.push_back rvalue和拷贝省略

我像这样将一个临时对象 push_back 到一个 vector 中:vector<A> vec; vec.push_back(A("abc")); 编译器是否会对构造临时对象A("abc")直接应用复制省略优化,并将其推入vector中,以使得在将临时对象推入vec时不会触发A的...

10得票2回答
当按值返回时不会调用复制构造函数

我正在尝试使用C++构造函数。以下是我的代码:#include <iostream> using namespace std; class ArrayWrapper { public: // default constructor produces a moderatel...

10得票2回答
标准是否规定副本必须相等?

假设我有一种奇怪的字符串类型,它要么拥有其底层缓冲区,要么不拥有: class WeirdString { private: char* buffer; size_t length; size_t capacity; bool owns; public: ...

9得票3回答
RVO在失败时强制编译错误

这里有很多关于何时可以执行RVO的讨论,但很少有关于实际执行RVO的内容。如先前所述,根据标准,无法保证RVO的执行,但是否有一种方法可以保证RVO优化成功或相应的代码无法编译? 到目前为止,我部分地成功地使代码在RVO失败时发出链接错误。为此,我声明了未定义的复制构造函数。显然,这既不健壮...

9得票1回答
按值传递和复制省略优化

我找到了这篇关于C++技术的文章:https://web.archive.org/web/20120707045924/cpp-next.com/archive/2009/08/want-speed-pass-by-value/ 作者给出了建议: 不要复制函数参数,相反,通过值传递它们,让...

9得票2回答
使用函数返回值初始化对象时未调用拷贝构造函数

Consider the following code: #include <iostream> using namespace std; class A { public: int a; A(): a(5) { ...

8得票2回答
当RVO无法实现时,我们是否应该使用`std::move`?

众所周知,在函数返回值中应避免使用 std::move,因为它可能会阻止 RVO(返回值优化)。 我们感兴趣的问题是,如果我们确切地知道 RVO 不会发生该怎么办。 这是 C++14 标准的规定 [12.8/32]: 当满足复制/移动操作省略的条件时,但不适用于异常声明,并且要复制的对象...

8得票3回答
为什么这里会涉及移动构造函数?

我有这段C++代码: class Args {}; class MyClass { public: MyClass(Args& a) {} MyClass(MyClass &&) = delete; }; int main() { Args a;...

8得票5回答
无论是否进行复制省略,这段代码是否定义良好?

考虑以下代码: #include <iostream> struct Test { int x; int y; }; Test func(const Test& in) { Test out; out.x=in.y; out.y...