我用C++ 11和工作一个const阵列的STRUCT具有包含下面的结构一类:初始化含有初始化列表
struct Settings{
const std::string name;
const std::string* A;
const size_t a;
};
class X {
static const Settings s;
//More stuff
};
在.cpp
文件I想要定义像这样
X::s = {"MyName", {"one","two","three"}, 3};
但这不起作用。但是,它会利用工作的一个中间变量
const std::string inter[] = {"one","two","three"};
X::s = {"MyName", inter, 3};
有没有办法做到这一点没有中间变量?
你的struct *不包含一个const数组。它包含一个指向常量字符串的指针。考虑到这一点,应该很容易明白为什么你需要“中间变量”。 – juanchopanza
@juanchopanza:嗯,我想'A'指向const Array的(开始处)。它也可能是一个指向“const std :: string”的指针,但那不是我想要的。但也许我不明白你指的是什么... – Haatschii
@Haatschii:你混淆了一个事实,即一个数组衰减成一个指针,其数组和指针是相同的。就语言语义而言,数组不是指针。同样,初始化器列表不是数组。编译器可以用这样的列表初始化一个数组,并且它可以将一个数组衰减为一个指针,但是在您的示例中它不知道将列表转换为数组,然后将其衰减为指针。因此,需要中介,在赋值给指针之前将初始化器列表转换为连续数组。 –