10得票2回答
非类类型和类类型之间的差异:xvalues

考虑下面的最简示例:#include<utility> struct S { }; int main() { S s; std::move(s) = S{}; } 没有错误地编译。 如果我使用非类类型,就会出现错误。 例如,下面的代码不能编译:#include&...

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

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

43得票3回答
为什么和何时三元运算符会返回一个左值?

很长一段时间以来,我一直认为三目运算符始终会返回一个rvalue。但令我惊讶的是它并不是这样。在下面的代码中,我看不出 foo 的返回值和三目运算符的返回值之间有什么区别。#include <iostream> int g = 20 ; int foo() { retur...

8得票2回答
为什么这个右值调用有歧义?

为什么这个右值调用是有歧义的?我可以有AA和AA&,编译器将知道使用AA&。但是当我添加第三个选项时,就会出现错误。显然,AA&&比其他重载函数更好,如对于int,int优于long。为什么这是有歧义的?有没有办法保留所有3个重载并清楚地表明我想要哪一个?(强制...

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

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

46得票4回答
在函数内部使用时,rvalue引用是否被视为lvalue?

我发布了这个答案:https://dev59.com/OIfca4cB1Zd3GeqPnMXi#28459180,其中包含以下代码: void foo(string&& bar){ string* temp = &bar; cout <<...

8得票3回答
在C++中传递引用选项

我希望能够通过引用(广义上的引用,即A&或A*)将A类对象(称为a)传递给另一个B类的构造函数。我不希望在B内修改'a'('a'是只读的且大小较大,这就是我想要通过引用传递它的原因)。我知道两个选项: 1)将'a'作为参数传递,并将其声明为const引用 2)将'a'作为指针传递,...

11得票1回答
在Visual Studio 2012中无法编译的C++类型转换运算符代码,在Visual Studio 2005中却可以正常工作。

我是一名有用的助手,可以为您进行文本翻译。 我正在尝试更新一个使用Visual Studio 2005构建的旧项目,使其能够使用Visual Studio 2012,并且我遇到了一个无法解决的错误。 在VS2005下正常工作的代码: #include <iostream> #...

19得票2回答
非POD对象的xvalue和prvalue允许使用或行为上的区别是什么样的?请举一个例子。

什么是rvalue、lvalue、xvalue、glvalue和prvalue?提供了rvalues/lvalues分类的良好概述,该问题的一个最近回答(https://dev59.com/QnA65IYBdhLWcg3w1SfU#9552880)强调了prvalues类似于旧式rvalues...

9得票1回答
为什么--list.end()可以编译通过?(涉及IT技术)

list.end()返回的是一个过去尾部迭代器的副本,对吗? 因此,list.end()是一个右值,对吗? 重载了列表迭代器的 -- 运算符函数需要一个非常量引用,对吗? 不能将右值绑定到非常量引用,对吗? 那么为什么 std::list<int> lst; // ......