17得票3回答
为什么不能将非const的左值引用绑定到prvalue?

出于某种原因,我没有找到这个确切的问题。为什么允许将rvalue绑定到const lvalue引用,而不使用const则不可能呢? 我确实理解rvalue的生命周期在某种程度上得到了延长(在第一种情况下),但如果是这样的话,为什么编译器会禁止修改那个不再是临时对象的'rvalue'呢? 例...

17得票1回答
std::common_type应该使用std::decay吗?

考虑到类型A,B,我关注的是std::common_type<A,B>的确切定义,不考虑任意类型A...的可变参数情况下的std::common_type<A...>。因此,让我们 using T = decltype(true ? std::declval<A...

16得票3回答
既然字符串字面值被视为lvalue,那么为什么绑定的lvalue引用必须是const呢?

我知道已经有类似这个话题的内容了(例如这个)。 本话题中给出的例子是:std::string & rs1 = std::string(); 显然,std::string()是一个右值。然而,我的问题是为什么s1是合法的而s2不是?const std::string& s1 =...

16得票5回答
使用C++时出现“需要lvalue作为赋值操作的左操作数”错误

int main() { int x[3]={4,5,6}; int *p=x; p +1=p;/*compiler shows error saying lvalue required as left operand ...

16得票2回答
C++0x 右值引用 - 左值-右值绑定

这是对C++0x rvalue references and temporaries问题的跟进。 在之前的问题中,我问了这段代码应该如何工作:void f(const std::string &); //less efficient void f(std::string &&...

16得票3回答
打印返回结构体的成员

我在打印从函数返回的结构体成员时遇到了问题。#include <stdio.h> struct hex_string { char a[9]; }; struct hex_string to_hex_string_(unsigned x) { static co...

15得票3回答
什么是对象的动态类型?

我认为动态类型指的是使用new动态分配的对象。在下面的情况中,你认为p指向的是动态类型还是静态类型?在标准中,并没有说明动态类型是动态对象。 1.3.3 - lvalue表达式所表示的lvalue引用的最派生对象(1.8)的类型。[例如:如果指针(8.3.1)p的静态类型为“指向类B的...

15得票2回答
重载操作符[]时,不会出现“需要左值作为赋值的左操作数”错误。

这有点相反于所有“lvalue required as left operand of assignment”错误的问题。 我有一个重载了operator[]的类,但只重载了返回临时对象的版本。如果它返回一个int:struct Foo { int operator[]( int id...

15得票5回答
为什么数组类型对象不可修改?

据这里所述: 术语可修改的左值(modifiable lvalue)用于强调左值既可以被更改也可以被检查。下列对象类型是左值但不是可修改的左值: 数组类型 不完整类型 带有一个成员限定为const类型的结构体或联合体类型 由于这些左值不可修改,它们不能出现在赋值语句的左侧。 为什么数组...

14得票1回答
类,右值和右值引用

左值是绑定到内存的明确区域的值,而右值是表达式值,其存在是临时的,并不一定引用到明确的内存区域。每当在期望右值的位置使用左值时,编译器执行左值到右值的转换,然后继续评估。 http://www.eetimes.com/discussion/programming-pointers/40233...