微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

push_back{“ George”,1}和push_backStudent“ Jack”,10之间有什么区别?

如何解决push_back{“ George”,1}和push_backStudent“ Jack”,10之间有什么区别?

我只是想知道以下两行之间是否有区别:

objStudents.push_back({ "George",1 });
objStudents.push_back(Student("Jack",10));

一种方法比另一种方法更有效吗?还是只是完成相同任务的另一种语法?

解决方法

假设Student的构造函数带有正确的参数,区别在于objStudents.push_back(Student("Jack",10));总是编译, objStudents.push_back({ "George",1 });仅在未声明构造函数explicit的情况下编译。另一方面,如果Student是一个集合(例如struct Student { string s; int i; };),则只有objStudents.push_back({ "George",1 });会编译。

如果两种形式都可以编译,则两种形式的效率均相同-两种形式都可以从{.1 Student,然后调用move(如果存在)或复制构造函数。

在使用构造函数的情况下,即使构造函数为"George",1仍可编译的更有效形式为explicit,它直接在向量内部构造objStudents.emplace_back("George",1);并避免了多余的操作移动或复制。当然,这里的“更有效”是理论上的-编译器可以使用Student来优化多余的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。