我有可以在以下概括的情况恒定大小的数组:初始化在初始化列表
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但如果你的编译器是新的:)
见:How do I initialize a member array with an initializer_list?
即使C++ 98也支持初始化器列表中数组的初始化。 – 2014-11-07 18:13:42
“据我所知,是集只是一个指向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
支持对于它的价值,'Set'不只是一个指针数组“10”整数,在这里也不是“静态”。相反,在某些情况下,数组名称“Set”衰减为指向数组的第一个元素的指针。差异可以用'sizeof'清楚地看到 - 即sizeof(Set)== 10 * sizeof(int)!= sizeof(int *)'。 – 2012-08-06 22:59:18
@StuartGolodetz感谢您的澄清。当我说静态时,我的意思是静态的形式,它与对象/实例一起存储,而不仅仅是堆中的其他地方。当然,这是对我而言“静态”一词的严重滥用;抱歉。 – Serge 2012-08-06 23:00:58
不用担心:)我主要是试图澄清数组和指针之间的区别,以避免可能在那里出现误解。 – 2012-08-06 23:53:24