34得票5回答
通过std::bind传递rvalue

我想通过std::bind传递一个右值引用到一个C++0x中要求接受右值引用的函数。 我无法弄清楚如何做到这一点。 例如:#include <utility> #include <functional> template<class Type> void ...

34得票7回答
获取临时对象的地址

§5.3.1 一元操作符,第三节 一元&操作符的结果是其操作数的指针。操作数应该是一个左值或者限定符ID。 "shall be"在这里的确切含义是什么?这是否意味着获取临时变量的地址是错误的?我只是想知道,因为g++只给了我一个警告,而comeau拒绝编译以下程序:#inclu...

34得票7回答
在C++中,所有的临时对象都是rvalue吗?

我过去几年一直在使用C ++编码。但有一个问题我一直没有搞清楚。我想问一下:在C++中,所有的临时变量都是右值吗? 如果不是,能否提供一个示例,其中代码产生的临时变量是左值?

33得票2回答
非类类型的右值永远具有cv无限定类型。

§3.10第9节指出,“非类右值始终具有无cv修饰类型”。这让我想起来......int foo() { return 5; } const int bar() { return 5; } void pass_int(int&& i) { std::...

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

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

31得票3回答
为什么在C语言中,前置递增运算符会产生rvalue?

在C++中,前置自增运算符返回左值,因为自增后的对象本身被返回,而不是其副本。 但在C中,它返回右值。为什么?

31得票3回答
字面字符串和函数返回值是左值还是右值?

想知道字面字符串是左值还是右值。其他字面值(如int、float、char等)是否为左值或右值? 函数的返回值是左值还是右值? 如何区分它们?

30得票1回答
最佳构造函数形式是什么?按值传递还是引用传递?

我正在思考构造函数的最佳形式。这里是一些示例代码: class Y { ... } class X { public: X(const Y& y) : m_y(y) {} // (a) X(Y y) : m_y(y) {} // (b) X(Y&& y)...

27得票2回答
C++0x中将const RValue引用作为函数参数

我试图理解为什么有人会编写一个接受const rvalue引用的函数。 在下面的代码示例中,const rvalue引用函数(返回“3”)有什么用途。 并且为什么重载决议喜欢const Rvalue而不是const LValue引用函数(返回“2”)。#include <string&...

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

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