14得票1回答
为什么我的代码中rvalue引用绑定到xvalue不起作用?

我尝试理解C++11中的左值和右值。所以我写了一个测试代码:int x = 10; int foo() { return x; } int& bar() { return x; } int&& baz() { return 10; } int main() { ...

14得票7回答
为什么取一个临时变量的地址是非法的?

我知道下面写的代码是不合法的void doSomething(std::string *s){} int main() { doSomething(&std::string("Hello World")); return 0; } 原因是我们不能获取临时对象的地址。...

14得票2回答
限定符和说明符之间的相关性是什么?

const和volatile在C规范中被称为cv-qualifier。 specifier和qualifier(cv-qualifier)之间的确切区别是什么?一个限定符是否也是一个说明符? qualifier是否只能用于lvalue(左值)? 除了cv-qualifier之外,还有哪些...

14得票1回答
成员变量的类型应该取决于构造函数参数的类型

我尝试定义一个名为A的类,如下所示: template< typename T > class A { public: A( T elem ) : _elem( elem ) {} private: TYPE _elem; // "T...

14得票3回答
“++i++”为什么是无效的,而“(++i)++”是有效的?

让我们考虑以下代码:int main() { int i = 2; int b = ++i++; return 3; } 编译以下内容时出现错误:<source>: In function 'int main()': <source>:3:16...

13得票3回答
获取此值的地址时出现“表达式必须是l值或函数指示符”的错误

我正在尝试在C++中完成这个任务。class Abc { int callFunction1() }; void function1(Abc** c1) {//do something} int Abc::callFunction1() { function1(&thi...

13得票4回答
数组和右值

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

13得票2回答
C++0x:rvalue引用与非const左值

在C++03中编程时,我们不能将未命名的临时对象T()传递给函数void foo(T&);。通常的解决方案是给临时对象命名,然后像这样传递: T v; foo(v); 现在,C++0x推出了右值引用,一个被定义为void foo(T&&)的函数将允许我传递一个临时...

13得票3回答
将左值传递给右值

我写了一个小的“阻塞队列”类。令我不爽的是,我在enqueue成员函数中为传递的值创建了冗余代码。 这里有两个函数完全做同样的事情(除了rvalue使用std::move将rvalue移动到实际的队列集合中),分别处理lvalue和rvalue: void enqueue(const ...

13得票1回答
将右值引用传递给const左值引用参数

我正在尝试理解C++11中的rvalue引用,并学习如何在代码中使用它们以获得最佳性能。 假设我们有一个类A,它具有指向大量动态分配数据的成员指针。 此外,还有一个方法foo(const A& a),对类A的对象进行某些操作。 当对象A被传递给函数foo时,我想防止调用A的复制构...