14得票5回答
什么是decltype(0 + 0)?

(受一个答案的启发。) 根据N3290,§7.1.6.2p4,其中列表项未编号,但在此处为方便起见进行了编号: 由decltype(e)表示的类型定义如下: 如果e是未括在括号中的id表达式或未括在括号中的类成员访问(5.2.5),则decltype(e)是由e命名的实体的类型。如果没...

19得票4回答
为什么as_const禁止rvalue参数?

我想问为什么as_const禁止rvalue参数,根据cppreference.com(即为什么标准委员会这样做,而不是cppreference.com特别引用它们的原因。也不是为了确保委员会意图的规范在哪里被编码,只是为了确保:))。这个(人为制造的)例子将产生一个错误(用户希望将其设置为c...

12得票1回答
理解带有rvalue/lvalue的模板参数推导

这是对函数模板不认识左值的跟进。 让我们来看一下以下代码:#include <iostream> template <class T> void func(T&&) { std::cout<<"in rvalue\n"; } temp...

8得票4回答
类型为'int&'的非const引用从类型为'int'的临时变量进行无效初始化

#include<iostream> using namespace std; int fun(int &x) { return x; } int main() { cout << fun(10); return 0; } 有人能解...

31得票6回答
一个 rvalue 结构的成员是 rvalue 还是 lvalue?

调用返回结构体的函数是rvalue表达式,但它的成员呢? 这段代码在我的g++编译器上运行良好,但gcc报错显示"需要左值作为赋值运算符的左操作数":struct A { int v; }; struct A fun() { struct A tmp; return ...

9得票5回答
为什么rvalue没有地址?

为什么rvalue没有内存地址?它们在程序执行时不会加载到RAM中吗?还是它指的是存储在处理器寄存器中的值?

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

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

19得票4回答
常量引用和左值

我们不能写成int& ref = 40,因为我们需要右边的lvalue。但是我们可以写const int& ref = 40。为什么呢?因为40是一个rvalue而不是一个lvalue。 我知道这是一个例外,但是为什么呢?

7得票2回答
static_cast<T>对T&做什么?

我曾经提出这个问题,并试图通过使用static_cast来解决它。(顺便说一句,这确实解决了问题,只是我不确定我理解为什么这样做。) 在代码中: vector&lt;int&gt; foo = {0, 42, 0, 42, 0, 42}; replace(begin(foo), end(f...

26得票2回答
优化编译器能否添加std::move?

如果编译器能够证明lvalue不会再次使用,那么它能否执行自动lvalue-to-rvalue转换?以下示例将澄清我的意思:void Foo(vector&lt;int&gt; values) { ...} void Bar() { vector&lt;int&gt; my_values...