2014-10-18 16 views
0

我具有類似於此的類:現在有一種方法可以使用C++ 11中的初始化程序列表來初始化一個固定大小的char數組嗎?

class A 
{ 
    char _s[6]; 
public: 
    A(const char s[6]) : _s{s[0], s[1], s[2], s[3], s[4], s[5]} 
    { } 
}; 

這是使用C++ 11初始化列表到initialze _schar[]的唯一方式(或任何其它類型的基本陣列)?

+0

是可變構造函數的一個選項嗎? – 2014-10-18 17:01:41

+0

@PiotrS。我不這麼認爲,不。 – 2014-10-18 17:04:58

+0

有時,不在ctor-init-list中進行初始化,而是在ctor-body中進行,這是適當的。 – Deduplicator 2014-10-18 17:06:16

回答

4
class A { 
    std::array<char, 6> _s; 

public: 
    A(std::array<char, 6> s) : _s(s) {} 
}; 

int main() { 
    std::array<char, 6> s; 
    A a{s}; 
} 

或者,如果你想避免陣列複製到構造:

class A { 
    std::array<char, 6> _s; 

public: 
    A(std::array<char, 6> const &s) : _s(s) {} 
}; 

int main() { 
    std::array<char, 6> s; 
    A a{s}; 
} 

你應該知道,你的構造A(const char s[6])並不需要一個數組,而是一個指針。它與A(char const *s)相同,所以構造函數不知道你傳入的數組大小是多少。這只是關於原始數組的奇怪事情之一,也是不使用它們的原因之一。

相關問題