默认情况下,return是否使用move或copy语义?

Reo*_*ron 3 c++ c++17

从C#到C ++,试图了解幕后发生的事情。

鉴于:

int ReturnSomething(){
    int i = 1;
    return i;
}
Run Code Online (Sandbox Code Playgroud)

在C ++ 17中,移动优先于复制吗?如果是这样,相同的规则是否适用于明确定义了移动构造函数的用户定义类型?

eer*_*ika 5

默认情况下,return是否使用move或copy语义?

要看。

在C ++ 17中,移动优先于复制吗?

确切的规则有些复杂,但是总的来说,如果可以移动,则优先于复制。

在某些情况下,甚至没有动静。例如:

T ReturnSomething(){
    return 1;
}
T t = ReturnSomething();
Run Code Online (Sandbox Code Playgroud)

不涉及复制。为t变量分配一个对象,并ReturnSomething直接初始化该对象。没有涉及临时对象。

当然,当类型像平常一样可移动/可复制时,没有明显的区别int。即使有副本,也可以对其进行优化。复制和移动整数之间没有区别。