2

I was just wondering if there's a difference between the following two lines:

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

Is one way more efficient than the other? Or is it just a different syntax that completes the same task?

4

1 回答 1

4

假设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从 eg构造,"George", 1然后调用 move(如果存在)或复制构造函数。

在使用构造函数的情况下,一种更有效的形式,即使构造函数 is 也能编译explicit,is直接在向量内部objStudents.emplace_back("George", 1);构造并避免额外的移动或复制。Student当然,这里的“更高效”是理论上的——编译器可能能够以push_back.

于 2020-10-26T03:02:15.497 回答