我尝试在类中初始化一个字符串数组,如下所示:
class Haab{
string str[];
Haab(){
str[] = {"abc", "abd", "abe"};
}
};
但是Devc ++ 5.6.1报告了一个警告:
[Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
这种在类中初始化数组的方式是非法的吗?如果是这样,如何正确初始化阵列?谢谢。
答案 0 :(得分:2)
给定的代码,
class Haab{
string str[];
Haab(){
str[] = {"abc", "abd", "abe"};
}
};
在许多方面无效:
string str[];
声明一个未知大小的成员数组。不能这样做。
在str[] = {"abc", "abd", "abe"};
中,表达式str[]
使用[]
索引运算符而未指定索引。
如果进行了解析,则=
将表示单个字符串的分配。
这是一种C ++ 03做事的方式:
#include <string>
#include <vector>
namespace qwe {
using std::string;
using std::vector;
class Haab
{
private:
vector<string> str_;
public:
Haab()
{
static char const* const data[] = {"abc", "abd", "abe"};
for( int i = 0; i < 3; ++i )
{
str_.push_back( data[i] );
}
}
};
} // namespace qwe
还有其他C ++ 03方法,所有方法都很难看(如上所述)。
在C ++ 11及更高版本中,它可以用更优雅的方式完成。简单的表示法;
#include <string>
#include <vector>
namespace qwe {
using std::string;
using std::vector;
class Haab
{
private:
vector<string> str_;
public:
Haab()
: str_{ "abc", "abd", "abe"}
{}
};
} // namespace qwe
但是仍然无法使用Visual C ++ 13.0进行编译(它使用MinGW g ++ 4.9.1进行编译)。