我用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:你混淆了一個事實,即一個數組衰減成一個指針,其數組和指針是相同的。就語言語義而言,數組不是指針。同樣,初始化器列表不是數組。編譯器可以用這樣的列表初始化一個數組,並且它可以將一個數組衰減爲一個指針,但是在您的示例中它不知道將列表轉換爲數組,然後將其衰減爲指針。因此,需要中介,在賦值給指針之前將初始化器列表轉換爲連續數組。 –