簡體   English   中英

如何在使用模板時初始化數組 <typename T> C ++

[英]How to initialize an array when using template<typename T> C++

通常,如果我有例如string array[10]我可以初始化數組中的所有點,如:

for(int i = 0; i < 10; i++)
    array[i] = "";

或者如果它是一個帶指針的數組,我會編寫array[i] = nullptr ,但是當類型更像T array[10]時,我該如何初始化?

如果只需要值初始化,則可以使用空括號對所有數組成員進行值初始化:

T array[10]{};
//         ^^

要么:

T array[10] = {};

值初始化為標量生成零值或空值,為聚合值初始化每個成員,並為非聚合類類型調用默認構造函數。

(如果要使用T{}以外的值初始化數組元素,則需要更復雜和特定的內容。)

那么你可以像標准那樣做,並使用形式的初始化函數

template<typename T, std::size_t N>
void initialize(T (&arr)[N], const T& value = T())
{
    for(auto& e : arr)
        e = value;
}

現在你可以調用它,而不是傳遞一個值,並使用默認值初始化數組,或者你可以指定一個值,數組將用該值初始化。

如果您的目標是在數組的所有元素上調用默認構造函數,則可以使用值初始化:

#include <iostream>
#include <string>
#include <cassert>

template <typename T>
struct A {
  // value-initialize `array` which value-initializes all elements of `array`.
  A() : array() {}
  T array[10];
};

int main() {
    A<int> ints;

    for(auto e: ints.array) {
        assert(e == 0);
    }

    A<std::string> strings;

    for(auto e: strings.array) {
        assert(e.empty());
    }

    A<int*> int_ptrs;

    for(auto e: int_ptrs.array) {
        assert(e == nullptr);
    }

    // etc.
}

暫無
暫無

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

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