rvalue相关内容

为什么要使用 const 进行隐式转换?

广泛阅读ISO/IEC 14882, 编程语言 - C++ 我仍然不确定为什么需要 const 来隐式转换为具有单个参数构造函数的用户定义类型,如下所示 #include X类{上市:X(整数值){printf("用 %i 初始化的构造函数",value);}}无效隐式转换函数(常量 X& 值){//产生“用99初始化的构造函数"}int main (int argc, ch ..
发布时间:2022-01-23 23:55:50 C/C++开发

返回的对象如何可分配?

在 Effective C++ 第 3 条中,Scott Meyers 建议为名为 Rational 的类重载 operator*: 类理性 { ... };const Rational 运算符*(const Rational& lhs, const Rational& rhs); 返回值是const-qualified的原因解释如下:如果不是const,程序员可以编写如下代码: (a ..
发布时间:2022-01-23 23:54:52 C/C++开发

这里的 const 修饰符不是不必要的吗?

“Effective C++"第 3 条说“尽可能使用 const",并给出了如下示例: const Rational operator*(const Rational& lhs,const 理性&右); 为了防止客户犯下这样的暴行: 有理 a, b, c;...(a * b) = c;//在 a*b! 的结果上调用 operator= 但是函数的非引用返回值不是已经是右值了吗?那么为什么 ..
发布时间:2022-01-23 23:15:36 C/C++开发

交换引用的临时元组

我正在编写一个自定义迭代器,它在取消引用时会返回一个引用元组.由于元组本身是短暂的,我认为我不能从 operator*() 返回引用.我认为我的迭代器在语义上是有意义的,因为它具有引用语义,即使 operator* 返回一个值. 问题是,当我尝试调用 std::swap 时(或者更确切地说,当 std::sort 调用时),如下所示,我收到错误,因为交换需要 l 值.这个问题有简单的解决方法 ..
发布时间:2022-01-20 08:14:06 C/C++开发

Go中的临时地址?

处理这种情况的最干净的方法是什么: func a() string {/* 无所谓 */}b *string = &a() 这会产生错误: 不能取a()的地址 我的理解是,如果获取了地址,Go 会自动将局部变量提升到堆中.这里很清楚,要取返回值的地址.处理这个问题的惯用方法是什么? 解决方案 地址操作符返回一个指针,指向具有“家"的东西,例如.一个变量.您的代码中表达式的值 ..
发布时间:2022-01-19 15:35:04 其他开发

将临时绑定到左值引用

我有以下代码 字符串三(){返回“三";}void mutate(string& ref){}主函数(){变异(三());返回0;} 你可以看到我正在将 three() 传递给 mutate 方法.这段代码编译得很好.我的理解是,不能将临时对象分配给非常量引用.如果是,这个程序是如何编译的? 有什么想法吗? 编辑: 尝试过的编译器:VS 2008 和 VS2010 Beta ..
发布时间:2022-01-17 08:26:51 C/C++开发

延长临时工的寿命

允许这样做的设计原理是什么 const Foo&a = function_returning_Foo_by_value(); 但不是这个 Foo&a = function_returning_Foo_by_value(); ? 第二行可能会出错(第一行不会出错)? 解决方案 我会回答你的问题......反过来. 为什么他们允许 Foo const&foo = fooBy ..
发布时间:2022-01-05 11:51:47 C/C++开发

为什么“通用参考"具有与右值引用相同的语法?

我刚刚对那些(相当)新特性进行了一些研究,我想知道为什么 C++ 委员会决定为它们引入相同的语法?似乎开发人员没有必要浪费一些时间来了解它是如何工作的,一个解决方案让我们考虑进一步的问题.就我而言,它是从问题开始的,可以简化为: #include 模板 void f(T& a){std::cout ..
发布时间:2022-01-05 11:50:28 C/C++开发

为什么这个结果不是左值?

我需要一些关于这种奇怪行为的建议——让我们看看这段代码: int ** p; 编译没有任何问题: p++; 但是这个: ((int**)p)++; 给我这个错误信息:“error: lvalue required as increment operation". 我正在将 p 转换为它已经是的类型,没有任何变化,那么问题是什么?这是我遇到的问题的简化版本,当我试图编译一个旧的gd ..
发布时间:2021-12-31 22:09:48 其他开发

static_cast 是什么?对 T& 做些什么?

所以我问了这个问题,我想通过static_cast解决它.(顺便说一句,它确实解决了问题,我只是不确定我是否理解原因.) 在代码中: vectorfoo = {0, 42, 0, 42, 0, 42};replace(begin(foo), end(foo), static_cast(foo.front()), 13); static_cast 是否只是构造了一个 R 值 int?那和只 ..
发布时间:2021-12-31 22:09:20 C/C++开发

一个 VS2010 错误?允许在没有警告的情况下绑定非常量引用到右值?

string foo() { return "hello";}int main(){//下面将非常量(左值)引用绑定到右值应该是非法的字符串&tem = foo();//下面应该是正确的,因为只有const引用可以绑定到右值(最重要的const)const string&constTem = foo();} GCC 是给出编译错误的好方法:从 类型的临时对象对 std::string& 类型的非 ..
发布时间:2021-12-14 18:43:44 C/C++开发

隐式生成的赋值运算符应该是 &ref 资格?

以下代码在 gcc 4.8.1 上编译没有问题: #include 结构体{};int main(){富吧;foo() = 酒吧;foo() = std::move( bar );} 似乎为 foo 隐式生成的赋值运算符不是 & ref-qualified,因此可以在右值上调用.根据标准,这是正确的吗?如果是这样,有什么理由不要求隐式生成的赋值运算符是 & ref-qualified? ..
发布时间:2021-11-30 12:29:41 C/C++开发

在函数返回类型中返回右值引用与按值返回

在我的代码中,我有一个函数,它从一段数据构造一个字符串,然后返回它.此字符串未在其他任何地方使用,因此接收方对其使用移动分配或移动初始化是安全的. std::string ReadString(...) {...返回 std::string(...)} 这基本上就是我所拥有的.使函数返回类型 std::string&& 有什么意义,因为返回的值是右值? std::string&&读取字符串( ..
发布时间:2021-07-14 18:32:34 C/C++开发