527得票5回答
复制省略和返回值优化是什么?

什么是复制省略?什么是(命名的)返回值优化?它们意味着什么? 在什么情况下可能会发生?有哪些限制? 如果您被引用到这个问题,可能正在寻找 简介。 有关技术概述,请参见标准参考。 在这里查看常见情况。

120得票2回答
保证复制省略是如何工作的?

在2016年奥卢ISO C++标准会议上,一个名为通过简化值类别实现保证复制省略的提案被标准委员会投票纳入C++17标准。 保证复制省略如何工作?它是否涵盖了已经允许复制省略的一些情况,还是需要代码更改才能保证复制省略?

75得票2回答
C中的返回值优化和复制省略

有些人可能不知道在C语言中可以通过值传递结构体并返回结构体。我的问题是当在C语言中返回结构体时,编译器是否会进行不必要的复制。C语言编译器(例如GCC)是否使用返回值优化(RVO)优化?还是这只是C++中的概念?我所读到的关于RVO和拷贝省略的所有内容都是关于C++的。 让我们考虑一个例子。...

69得票3回答
C++函数中"return"的确切时刻

这似乎是一个愚蠢的问题,但在函数中执行return xxx;的确切时刻是否明确定义? 请看以下示例以了解我的意思(此处可以实时查看):#include <iostream> #include <string> #include <utility> //c...

34得票2回答
什么是复制省略,它如何优化复制交换惯用语?

我正在阅读“拷贝并交换”。 我试着阅读一些关于“拷贝省略(Copy Elision)”的链接,但是没有完全明白它的含义。有人可以解释一下这个优化是什么意思吗,特别是以下文字是什么意思: 这不仅是方便的问题,实际上是一种优化。如果参数(s)绑定到一个左值(另一个非 const 对象),...

32得票4回答
正确地将一个`decltype(auto)`变量从函数中传递

这是对"是否有任何实际使用decltype(auto)变量的情况?"的跟进。 考虑以下场景 - 我想将函数f传递给另一个函数invoke_log_return,该函数将: 调用f; 向stdout打印一些内容; 返回f的结果,避免不必要的复制/移动并允许复制省略。 请注意,如果f引发...

27得票3回答
我能否将一个不可移动和不可复制的函数结果拷贝到一个可选类型中?

我想在std::optional中存储一个不可移动且不可复制的非平凡类型,但该对象由自由函数构造。(示例)struct Foo { Foo(); Foo(Foo const&) = delete; Foo(Foo&&) = delete; ...

26得票3回答
如何实施复制省略,为什么它与删除的复制构造函数无法使用?

我有一个无法复制的类。复制这个类可能会出问题。我想要保证它永远不会被复制,因此我将其复制构造函数设为deleted:class A { public: A(); A(const A&) = delete; }; A fun() { return A(); };...

26得票2回答
复制省略与结构化绑定一起使用是否有效?

强制拷贝省略是否适用于通过结构化绑定进行的分解?它适用于以下哪些情况?// one auto [one, two] = std::array<SomeClass>{SomeClass{1}, SomeClass{2}}; // two auto [one, two] = std:...

26得票3回答
为什么在返回参数时不允许使用RVO?

在[C++11: 12.8/31]中有这样的说明: 引用自该规范: 在具有类返回类型的函数的返回语句中,当表达式是非易失性自动对象的名称(除了函数或catch子句参数),且具有与函数返回类型相同的cv非限定类型时,可以通过直接将自动对象构造到函数的返回值中来省略复制/移动操作。 这意味着:...