2017-05-09 63 views
0

我有以下代碼C++壽命內置集合

void my_func() { 
    std::vector<std::string> all_strings; 
    for (int i = 0 ; i < 10 ; i++) { 
     // "loop a" 
     all_strings.push_back(std::to_string(i)); 
    } 
    for (const std::string& str : all_strings) { 
     // "loop b" 
     std::cout << str << std::endl; 
    } 
} 

我創建的串,並將它們分爲「環路」中的向量。問題是,我是否可以在「循環b」中訪問這些向量值,其中「循環a」中本地創建的對象和內部對象已經消失。

換句話說,字符串是否被值複製到「循環a」中的向量中?

+0

'std :: to_string(i)'返回一個臨時的,所以從C++ 11開始一個移動將被執行,而不是一個副本。這並不重要,因爲小字符串優化會破壞性能增益,但在更復雜的示例中它可能會發生。 – nwp

回答

2

由於您的變量的定義,你是按值存儲std::string對象

std::vector<std::string> all_strings; 

這意味着vector擁有串副本,當它超出範圍會破壞。

1

是的,push_back將複製std::string並將其存儲在vector中。