23得票2回答
用 `void*` 将右值引用绑定到左值。

在尝试理解右值引用的工作原理时,我得到了这段代码:int* iptr = nullptr; int*&& irr = iptr; 编译上述代码会出现以下错误: error: rvalue reference to type 'int *' cannot bind to ...

22得票3回答
PODs, non-PODs, rvalue and lvalues

有人能解释一下rvalue、lvalue、POD和non-POD的细节,为什么下面标记的第一个表达式不正确,而第二个表达式是正确的吗? 在我看来,int()和A()都应该是rvalue,不是吗? struct A {}; int main() { int i; A a; int...

21得票3回答
Rvalue转换为lvalue?

为什么无法将 rvalue 转换为 lvalue?但是反向转换是可能的。从技术上讲,rvalue 确实具有内存地址,不是吗?

20得票2回答
为什么C++0x中的右值引用不是默认值?

即将到来的C++标准C++0x中一个很棒的新特性是“右值引用”。右值引用类似于左值(普通)引用,但它可以绑定到临时值上(通常,临时值只能绑定到一个const引用上):void FunctionWithLValueRef(int& a) {…} void FunctionWithRVal...

19得票4回答
Perl中的lvalue子例程有哪些用途?

我不理解lvalue子例程的用途是什么?使用普通子例程达不到的目的是什么?能否请您提供一些示例? 谢谢

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

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

19得票3回答
一个转换操作的结果是一个右值吗?

让int a = 0; 那么在标准C++中,(int)a是一个rvalue吗? 不同的编译器对这段代码显示出不同的结果:#include <iostream> using namespace std; void f(int& x) { cout <<...

18得票2回答
为什么C语言中的复合字面量是可修改的?

通常人们将“不可修改的”与字面量联系起来char* str = "Hello World!"; *str = 'B'; // Bus Error! 然而,当使用复合文字时,我很快发现它们是完全可修改的(并且查看生成的机器代码,您会看到它们被推送到堆栈上):char* str = (char[...

18得票3回答
在C++11中,如何获得一个没有名称的临时左值?

我有一个传统的C库和一个函数(setsockopts)需要通过指针传递参数。在C++11(gcc 4.8)中,我可以不初始化一个命名变量来传递这个参数吗? 我有以下并不令人满意的解决方案:#include <iostream> #include <memory> i...

18得票3回答
如何识别Rvalue或Lvalue引用以及if-it-has-a-name规则

我正在阅读Thomas Becker关于右值引用和其使用的文章。在其中,他定义了所谓的如果它有一个名字(if-it-has-a-name)规则: 声明为右值引用的东西可以是左值或右值。区分的标准是:如果它有一个名字,那么它就是一个左值。否则,它就是一个右值。 对我来说,这听起来非常...