rvalue相关内容

为什么as_const禁止右值参数?

我想问为什么 as_const 禁止右值参数,根据 cppreference.com(即标准人员为什么这样做,而不是为什么cppreference.com专门对此进行了引用.而且也不是在规范中将委员会的意图编成法典,只是为了确保:))).这个(人工的)示例将产生一个错误(用户希望使其保持常量以保持COW安静) QChar c = as_const(getQString())[0]; 另一个 ..
发布时间:2021-04-20 18:59:22 C/C++开发

插入无序的地图调用构造函数

为了避免元素重复,我正在构建一个包含元素并为其提供访问权限的类. 我的元素( DynLibrary )是可移动的,但不可复制 class DynLibrary{上市:DynLibrary():_handle(nullptr){}DynLibrary(const std :: string& path){DynLibrary :: open(path);}DynLibrary(const ..
发布时间:2021-04-20 18:47:53 C/C++开发

将左值传递给右值

我做了一个小的“阻塞队列"类.让我感到恼火的是,我为传递给 enqueue 成员函数的值创建了冗余代码. 以下是两个功能完全相同的函数(除了rvalue使用std :: move将rvalue移动到实际的队列集合中),分别处理lvalue和rvalue的情况除外: 无效排队(const T& item){std :: unique_lock锁(米);this- ..
发布时间:2021-04-20 18:33:25 C/C++开发

为什么不能使用右值来初始化左值引用?

我可以做 const A&a = A()和 A&&a = A(),但是为什么我不能做 A&a = A()? 解决方案 基本原理是,对临时变量进行突变几乎没有任何意义.这样做的任何尝试都可能是编程错误,而不是刻意的决定. 典型示例如下.假定允许绑定到非常量引用. void foo(int& x,int& y);//设置x和yint xx,yy;foo(xx,yy);//设置了xx和 ..
发布时间:2021-04-19 20:22:27 C/C++开发

左/右值用于前/后缀增量

学习左值和右值.定义可以是“地址",是左值,否则是右值. 我检查了运算符的优先级,前缀和后缀的增加都比“运算符的地址"具有更高的优先级. 对于以下两个示例,谁能解释一下为什么第一个“& value1 ++"是左值,而第二个“& value1 ++"是右值. 我对这两种情况的错误理解是:pValue1指向value1变量.无论在建立地址相关之前或之后将value1更改为8,valu ..
发布时间:2021-04-19 19:58:29 C/C++开发

为“左值"命名背后的原因是什么?和“右值"?

在C/C ++中命名“左值"和“右值"的背后是什么原因(我知道它们的功能)? 解决方案 标准提到了这一点: 左值(之所以这么称呼,是因为左值可能出现在赋值表达式的左侧)[...] 右值(之所以称为历史值,是因为右值可能出现在赋值表达式的右侧)[...] 也就是说,您可以分配一个左值,而您可以从其中分配一个右值. 然而,事实与事实之间的距离越来越远.您无法分配的左值的 ..
发布时间:2021-04-19 19:51:41 C/C++开发

分配给右值:为什么要编译?

在以下示例中: A类{私人:双重内容;上市:A():content(0){}运算符+(const A& other){内容+ = other.content;返回* this;}无效运算符=(const A& other){内容= other.content;}}; A 是用于double的简单包装器,其 + 和 = 运算符已被重载.在以下用途中: int main(int argc, ..
发布时间:2021-04-19 18:56:55 C/C++开发

左值与文字之间的比较是否会调用左值到右值转换?

我问了这个问题:常量变量的静态声明 并且显然归结为一个问题,为了比较的目的,浮点左值是否会转换为右值? 因此在此代码中,左值到 const float foo = 13.0F; static_assert(foo> 0.0F,“ foo必须大于0。”); 解决方案 是的,它已执行。基本上是因为 3.0> 1.2 是一个格式正确的表达式,除了操作数的prval ..
发布时间:2020-10-06 19:22:53 C/C++开发

C ++:函数左值或右值

我刚刚通过阅读此页面,开始学习c ++ 11中的右值引用。 ,但我陷入了第一页。这是我从该页面获取的代码。 int& foo(); foo()= 42; //好吧,foo()是一个左值 int * p1 =& foo(); //好吧,foo()是一个左值 int foobar(); j = foobar(); //好的,foobar()是一个右值 int * p2 =& ..
发布时间:2020-09-27 20:34:18 C/C++开发

为什么按值传递和右值传递c ++函数调用不明确?

如果有, void foo(Bar c); void foo(Bar& c); foo(Bar()); 为什么对“ foo”的调用不明确? foo参数中的Bar()显然不是rValue吗? 解决方案 绑定到引用是“完全匹配”,因为绑定到非引用,所以两个重载都同样好。 在Standardese中,这是13.3.3.1.4(“参考绑定” ,[ ..
发布时间:2020-09-27 19:43:52 C/C++开发

将从函数返回的Rvalue分配给另一个Rvalue

类测试{ public: int n1; }; 测试func(){ return Test(); } int main(){ func()= Test(); } 这对我来说没有意义。如何以及为什么允许这样做?它是未定义的行为吗?如果一个函数返回一个右值,那么如何将一个右值设置为另一个右值?如果我尝试使用任何原始类型进行此操作 ..
发布时间:2020-09-27 07:25:40 C/C++开发