Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态_将int转换为对int的引用?_C++_C++11_Rvalue Reference_Static Cast - Fatal编程技术网

C++ 静态_将int转换为对int的引用?

C++ 静态_将int转换为对int的引用?,c++,c++11,rvalue-reference,static-cast,C++,C++11,Rvalue Reference,Static Cast,是否允许: int x = 1; int r1 = static_cast<int&>(x); int r2 = static_cast<int&&>(x) 静态_将int转换为对int的引用? 允许吗 对。这是允许的 如果是的话,那么这些演员的意义是什么 转换到同一类型的左值引用几乎毫无意义,因为它本身使用的变量已经是左值。但是,它可能会影响decltype推断,如中所示。如果需要向下转换对base的引用(与int无关),则转换为对另一类型的引

是否允许:

int x = 1;
int r1 = static_cast<int&>(x);
int r2 = static_cast<int&&>(x)
静态_将int转换为对int的引用? 允许吗

对。这是允许的

如果是的话,那么这些演员的意义是什么

转换到同一类型的左值引用几乎毫无意义,因为它本身使用的变量已经是左值。但是,它可能会影响decltype推断,如中所示。如果需要向下转换对base的引用(与
int
无关),则转换为对另一类型的引用非常有用

转换为右值引用很有用,因为它将表达式的类型更改为xvalue。这允许从变量移动。这实际上就是
std::move
所做的。但这与
int
没有什么区别

static_cast<int&>(x);
x
(一个l值)强制转换为r值。这正是
std::move
所做的,并且
T&
用于实现移动语义


std::swap
使用
std::move
,因为没有任何负面影响和可能的性能提升。移动目录/工作分配的效率应至少与复制目录/工作分配的效率相同。

静态\u cast(x)什么都不做,因为它已经是左值了;您是在询问意义还是用例?你和交换有什么联系?移动int与复制基本相同…@Jarod42:不正确,请看,在那个例子中x不只是对z的引用吗?“不做任何事情”和“x已经是
int&
”都是假的,比较
decltype(x)
decltype(static\u cast(x))
演示:您将类型与值类别混淆了
x
在表达式中使用时是左值
int
。谢谢!知道了。我假设甚至可以显式地将int转换为对int的引用——例如,当我们从类方法返回对成员变量int&X::getSize(){return m_size;}的引用时?
static_cast<int&>(x);
static_cast<int&&>(x);