[英]Why is there no emplace or emplace_back for std::string?
我很確定我以前在這里看到過這個問題,但是當我嘗試搜索時似乎找不到該帖子,而且我不記得答案了。
為什么沒有emplace
或emplace_back
為std::string
?
我認為這與char
的使用無關,因為您可以擁有一個字符向量,並且在向量中使用emplace_back
一個字符沒有問題。
push_back
不會有任何好處
emplace_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
}
(eg) std::vector‹T>::emplace_back
是它直接在向量中構造了一個 T 類型的對象,而不是構造一個臨時對象然后再復制進去。
由於char
是一種原始類型,因此一種方法與另一種方法相比沒有優勢,因此std::string::emplace_back
沒有理由存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.