11得票1回答
为什么C++析构函数会影响返回值优化的行为?

我已经简化了我的代码如下。#include <vector> class NoncopyableItem { public: NoncopyableItem() { } NoncopyableItem(NoncopyableItem &&nt) { }; ...

11得票4回答
私有且未实现的复制构造函数时,是否允许使用RVO?

假设我有一个类,其中复制构造函数是私有的,且未实现(以使对象不可复制)class NonCopyable { // whatever private: NonCopyable( const NonCopyable&); void operator=(const Non...

11得票2回答
为什么使用std::tuple时不能保证复制省略?

我预期在C++20中,以下代码在打印A和B之间不会输出任何内容(因为我预期有保证的RVO会发生)。但实际输出为: A Bye B C Bye Bye 因此可以推断出一个临时对象被创建了。#include <iostream> #include <tuple> str...

10得票2回答
虚函数可以作为RVO(返回值优化)的候选吗?

C++编译器能否对虚函数应用返回值优化(RVO)? 在这种情况下:class AbstractReader { //... public: virtual std::vector<float> getFloatVector() = 0; //... } class Xm...

10得票2回答
使用标准布局结构体的RVO,不使用任何构造函数

我有一个表示二进制消息的结构体。我想编写一个函数从缓冲区(无论是文件还是套接字)中获取下一个这样的记录: struct Message { size_t length; const char* data; }; bool getNextRecord(const char* buff...

10得票3回答
g++:多个翻译单位涉及时,RVO如何工作

首先请看下面的代码,它由两个翻译单元组成。--- foo.h --- class Foo { public: Foo(); Foo(const Foo& rhs); void print() const; private: std::string st...

9得票1回答
C++ ABI如何处理RVO和NRVO?

我对编译器和链接器如何处理函数调用者的要求因函数使用RVO或NRVO而不同感到困惑。 也许这是我的误解,但我的假设是通常情况下没有RVO或NRVO, std::string s = get_string(); 涉及将s从get_string的结果中移动构造,如果get_string不执...

9得票2回答
基于作用域的锁保护的时机和返回值

class C { mutable std::mutex _lock; map<string,string> deep_member; public: auto get_big_lump() { std::unique_lock<s...

9得票4回答
当返回std::pair时,是否会发生RVO?

一个函数需要向调用者返回两个值,最好的实现方式是什么? 选项1: pair<U,V> myfunc() { ... return make_pair(getU(),getV()); } pair<U,V> mypair = myfunc(); 选项 1.1: ...

9得票3回答
何时选择复制省略而不是通过const引用传递参数?

可能是重复问题: 在C++11中,按值传递是否合理的默认值? 我正在阅读 Dave Abrahams 的文章“想要速度吗?就按值传递”,了解关于复制省略和 RVO(返回值优化)的内容。我想知道我们为什么需要复制省略呢? 我已经被告知太多次,应该通过const引用传递函数参数以避免复制...