我有可以在下面总结的情况:
class Test
{
Test();
int MySet[10];
};
是否有可能初始化MySet
在初始化列表?
喜欢这种初始化列表:
Test::Test() : MySet({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {}
有什么办法来初始化类的initalizer列表中选择一个固定大小的成员数组?
我有可以在下面总结的情况:
class Test
{
Test();
int MySet[10];
};
是否有可能初始化MySet
在初始化列表?
喜欢这种初始化列表:
Test::Test() : MySet({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {}
有什么办法来初始化类的initalizer列表中选择一个固定大小的成员数组?
而在C ++ 03,C ++ 11只引入了扩展初始化列表不可用。 如果使用编译器符合C ++的11个标准,你确实可以做到这一点。
struct Test {
Test() : set { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } { };
int set[10];
};
上面的代码使用编译好g++ -std=c++0x -c test.cc
。
正如在评论一个非常有用的用户我下面指出的那样,这个代码不编译使用微软的VC ++编译器,CL。 也许有人可以,如果使用等效告诉我std::array
会?
#include <array>
struct Test {
Test() : set { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } } { };
std::array<int, 10> set;
};
这也用汇编细g++ -std=c++0x -c test.cc
。
不幸的是,在C ++ 03,你不能初始化初始化列表阵列。 你可以在C ++ 11但如果你的编译器是新的:)
见: 我如何初始化与initializer_list的成员阵列?
“据我所知,是集只是一个指向10个整数静态数组”
不,这是错误的:它是一个数组,而不是一个指针。
您仍然可以初始化它在构造函数的初始化列表。
对于不支持C ++ 11大括号初始化(Visual C ++版本11和更早想到),你必须通过一些箍虽然跳,如下图所示编译:
#include <iostream>
#include <vector>
using namespace std;
#define CPP11
#if defined( _MSC_VER )
# if (_MSC_VER <= 1700)
# undef CPP11
# endif
#endif
#ifdef CPP11
class Cpp11
{
private:
int set_[10];
public:
Cpp11()
: set_{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
{}
int foo() const { return set_[3]; }
};
#endif
class Cpp03
{
private:
struct IntArray10 { int values[10]; };
IntArray10 set_;
static IntArray10 const& oneToTen()
{
static IntArray10 const values =
{ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} };
return values;
}
public:
Cpp03()
: set_( oneToTen() )
{}
int foo() const { return set_.values[3]; }
};
int main()
{}
代替使用原始阵列,不过,使用std::vector
和C +++ 11 std::array
,这两个甚至由Visual C ++ 11被支持。