现在有一种方法可以使用C++ 11中的初始化程序列表来初始化一个固定大小的char数组吗?

问题描述:

我具有类似于此的类:现在有一种方法可以使用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

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)相同,所以构造函数不知道你传入的数组大小是多少。这只是关于原始数组的奇怪事情之一,也是不使用它们的原因之一。