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