现在有一种方法可以使用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 _s
为char[]
的唯一方式(或任何其它类型的基本阵列)?
答
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)
相同,所以构造函数不知道你传入的数组大小是多少。这只是关于原始数组的奇怪事情之一,也是不使用它们的原因之一。
是可变构造函数的一个选项吗? – 2014-10-18 17:01:41
@PiotrS。我不这么认为,不。 – 2014-10-18 17:04:58
有时,不在ctor-init-list中进行初始化,而是在ctor-body中进行,这是适当的。 – Deduplicator 2014-10-18 17:06:16