gpt4 book ai didi

c++ - 应该在构造函数链中使用 move 语义吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:16:40 25 4
gpt4 key购买 nike

假设我有以下两个类:

class Person
{
public:
Person(string name, string surname)
: _name(move(name)), _surname(move(surname)) { }
...
private:
string _name;
string _surname;
};

class Student : public Person
{
public:
Student(string name, string surname, Schedule schedule)
: Person(move(name), move(surname)), _schedule(move(schedule)) { }
...
private:
Schedule _schedule;
};

int main()
{
Student s("Test", "Subject", Schedule(...));
...
return 0;
}

这是 move 语义的良好用法吗?如您所见,Student 构造函数中有一层“move-s”。是否可以在不使用 const 引用将参数转发给基本构造函数的情况下避免 move 函数调用开销?

或者我是否应该在需要将参数转发给基本构造函数时使用 const 引用?

最佳答案

没有。您只会获得非常大的类型的性能改进,这非常很少见。当然,当处理一些你事先不知道的类型 move 起来非常昂贵,或者不可 move 时,然后假设 move 便宜。

您现有的代码是惯用的 C++11,在这方面完美的转发构造函数是错误的,并且会可怕地破坏一个参数来启动。

关于c++ - 应该在构造函数链中使用 move 语义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15449397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com