从C#迁移到C ++,试图了解幕后发生的事情。
给出:
int ReturnSomething(){
int i = 1;
return i;
}
在C ++ 17中,移动优先于复制吗?如果是这样,相同的规则是否适用于明确定义了移动构造函数的用户定义类型?
答案 0 :(得分:5)
默认情况下返回使用移动或复制语义吗?
视情况而定。
在C ++ 17中,移动优先于复制吗?
确切的规则有些复杂,但通常,如果可以移动,则优先于复制。
在某些情况下,甚至没有移动。例如:
T ReturnSomething(){
return 1;
}
T t = ReturnSomething();
不涉及复制。为t
变量分配了一个对象,并且ReturnSomething
直接初始化该对象。没有临时对象。
当然,当类型像int
那样可移动/可复制时,没有明显的区别。即使有副本,也可以对其进行优化。复制和移动整数之间没有区别。