gpt4 book ai didi

c++ - 为什么 std::string 没有 emplace 或 emplace_back?

转载 作者:行者123 更新时间:2023-12-01 14:04:42 29 4
gpt4 key购买 nike

我很确定我以前在这里看到过这个问题,但是当我尝试搜索时似乎找不到该帖子,而且我不记得答案了。

为什么没有emplaceemplace_backstd::string ?

我不认为这与 char 的使用有关,因为你可以有一个字符 vector ,而且 emplace_back 没有问题在 vector 中添加一个字符。

最佳答案

超过 push_back 不会有任何 yield
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
}

关于c++ - 为什么 std::string 没有 emplace 或 emplace_back?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532890/

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