簡體   English   中英

用C ++ 14初始化

[英]Initializer with c++14

這是在c ++ 14中初始化類型的更好方法:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // your code goes here
    int i = 0;
    int _initializer_list_i {0};
    std::cout << "Initialize with = " << std::to_string(i); 
    std::cout << "Initialize with std::initializer_list " << std::to_string(_initializer_list_i);

    std::cout << "\nNormal intialize: \n";
    std::vector<int> v(10, 22);
    for(auto it = v.begin(); it != v.end(); it++)
        std::cout << *it << "\n";


    std::cout << "\n\nUsing intializer_list: \n";    
    std::vector<int> v2{10, 22};
    for(auto it = v2.begin(); it != v2.end(); it++)
        std::cout << *it << "\n";

    return 0;
}

當我使用{}時 ,它將調用std :: initializer_list的構造函數 ,但結果與=相同。 這里有一些性能案例嗎?

int i = 0;
int _initializer_list_i {0};

這是使用std :: vector <T>的另一種情況:

std::vector<int> v(10, 22);//allocate 10 with value 22
std::vector<int> v2{10, 22}; //Call std::initializer_list with 2 positions{10, 20}

哪種更好的初始化方式? 一些性能案例?

在operator =和{} init之間不會有性能損失,因為很可能會將其編譯為int的相同代碼。

關於向量-構造函數(a,b)與初始化列表不同。

總體來說,我建議你閱讀

()和{}初始化之間的差異有時會令人不快-在哪些情況下存在差異,在哪些情況下其行為完全相同? 這就是為什么存在關於該主題的幾篇非常不錯的文章的原因:我只想提及一些:

我個人更喜歡將花括號{}僅用於類似數組的初始化,並且對於構造函數調用使用圓括號(),但它取決於特定的用例。

暫無
暫無

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

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