我只是想知道以下两行之间是否有区别:
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 });
编译。
如果编译的话,两种形式都是同样有效的 - 都构造 Student
来自例如"George", 1
然后调用移动(如果存在)或复制构造函数。
在使用构造函数的情况下,这是一种更有效的形式,即使构造函数是 explicit
也可以编译。 ,是objStudents.emplace_back("George", 1);
,它构造 Student
直接在 vector 内部,避免额外的移动或复制。当然,这里的“更高效”是理论上的 - 编译器可能能够优化 push_back
形式的额外操作。 .
关于c++ - Push_back({ "George", 1 }) 和 Push_back(Student ("Jack", 10)); 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64523154/