51得票3回答
lvalue-to-rvalue转换是在什么时候发生的,它是如何工作的,是否会失败?

我在C++标准中看到了很多地方都使用了"lvalue-to-rvalue conversion"这个术语。据我所知,这种转换通常是隐式进行的。 标准中的措辞让我感到意外的一个特点是,他们决定将lvalue-to-rvalue视为一种转换。如果他们说glvalue始终可接受而不是prvalue...

26得票1回答
C++20中,是否应该将结构化绑定作为rvalue从函数返回?

考虑一个C++20程序,在函数foo中有一个结构绑定auto [y]。该函数返回y,它被转换为A类型的对象。可以使用const引用或rvalue引用构造A。#include <tuple> #include <iostream> struct A { A(co...

19得票2回答
当进行间接引用操作时,标准是否要求将指针变量转换为右值?

TL;DR 以下是给定的代码: int* ptr; *ptr = 0; *ptr 在进行间接寻址之前需要进行 lvalue-to-rvalue 转换吗?标准在多个地方都涵盖了 lvalue-to-rvalue 主题,但似乎没有足够的信息来确定是否需要此转换。根据N3485第4.1节第1...

18得票3回答
非 const 引用类型的无效初始化

在下面的代码中,我无法将一个临时对象作为参数传递给printAge函数:struct Person { int age; Person(int _age): age(_age) {} }; void printAge(Person &person) { cout &lt...

17得票2回答
swap()函数会引起未定义行为吗?

我试图理解[C++11: utility.swap]中关于std::swap的条件。该模板定义如下: template <typename T> void swap(T &, T &) (加上一些 noexcept 的细节) 并且具有“交换两个位置存储的值”的...

15得票2回答
我想我可能想到了一个数组类型的右值的示例。

C++03 §4.2 N°1: 类型为“N个T的数组”或“未知边界的T数组”的左值或右值可转换为类型为“指向T的指针”的右值。结果是该数组的第一个元素的指针。 这个陈述长期以来让我感到困惑的地方是,我并不完全明白什么是数组类型的rvalue。也就是说,我不能构建出其类型为数组且结果为rval...

13得票2回答
为什么可以将值类类型的 rvalue 赋值给它?

为什么这段代码能够编译通过?我原以为构造函数返回的右值不会被存储在内存中,因此不能作为左值使用。 class Y { public : explicit Y(size_t num = 0) {} }; int main() { Y(1) = Y(0); // WHAT?!?...

13得票4回答
数组和右值

$4.2/1 - "类型为“数组of N T”或“未知边界的T数组”的左值或右值可以转换为类型为“指向T的指针”的右值。 结果是一个指向数组的第一个元素的指针。" 我不确定除了在初始化/声明期间,我们如何获得数组类型的右值?

12得票1回答
为什么C++默认不使用移动构造函数来处理右值引用?

假设我有以下函数void doWork(Widget && param) // param is an LVALUE of RRef type { Widget store = std::move(param); } 为什么我需要使用std::move()将para...

12得票3回答
整数参数调用浮点重载,浮点参数调用整数重载?

今天我遇到了大致如下的代码: #include <iostream> void f(float&& f) { std::cout << f << "f "; } void f(int&& i) { std::cout &l...