簡體   English   中英

向量push_back與轉發?

[英]vector push_back with forwarding?

我在代碼中做了這樣的事情

S s;
s.a=1
s.b=2
v.push_back(s)

現在,C ++具有轉發功能,我可以編寫類似

v.push_back(1,2)

fyi visual studio支持轉發,因為以下功能可以正常工作

//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

您可以使用std::vector::emplace_back ,它將使用合適的構造函數在std::vector::emplace_back創建對象。 當然,這需要您定義此類構造函數。

v.emplace_back(1,2);

從C ++ 11開始,每個std容器都提供類似emplace的函數,該函數具有上述行為。

兼容性說明:MSVC可能尚不支持此功能,因為它僅支持CTP版本的可變參數模板,這不會影響標准庫,並且gcc的libstd ++仍缺少關聯容器中的emplace成員函數。

push_back不支持轉發,但是新的emplace_back支持。

但是, push_back確實支持初始化程序列表:

v.push_back({1,2});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM