我很肯定我以前在这里看到过这个问题,但我在搜索时似乎找不到这篇文章,我也想不起来答案了。
为什么没有emplace或emplace_back的std::string?
我认为这与char的使用无关,因为您可以有一个字符向量,并且在向量中使用一个字符没有问题。
发布于 2020-03-04 19:00:46
push_back是不会有任何收益的
emplace_back的强大之处在于它构造了一个对象就地,在那里它被设计为驻留对象。不需要复制或移动。它还为创建对象提供了更简单的语法,但这只是一个小优势。
class Person
{
std::string name;
int age;
double salary;
}
int main()
{
std::vector<Person> people;
people.push_back(Person{"Smith", 42, 10000.0}); //temporary object is needed, which is moved to storage
people.emplace_back("Smith", 42, 10000.0); //no temporary object and concise syntax
}对于std::string (或任何只能容纳原语类型的理论容器),增益是不存在的。无论您在适当的位置构造对象、移动对象或复制对象,都可以在程序集级别执行相同的操作--在给定内存中写入一些字节。
语法也不能变得比它更简洁--没有需要调用的构造函数。您可以使用文字变量或其他变量,但是您必须在push_back和emplace_back中做完全相同的事情。
int main()
{
std::vector<char> letters;
letters.push_back('a');
letters.emplace_back('a'); //no difference
}发布于 2020-03-04 19:03:16
(例如) std::vector‹T>::emplace_back的优点是它直接在向量中构造一个T类型的对象,而不是构造一个临时的对象,然后将它复制进去。
由于char是一种基本类型,所以一种方法与另一种方法相比没有优势,因此std::string::emplace_back没有存在的理由。
https://stackoverflow.com/questions/60532890
复制相似问题