1
我在玩C++ 11,我已經在Mac OS X上使用c++ -std=c++11 main.cpp
成功編譯了以下代碼。爲什麼C++ 11支持初始化使用基於堆棧的類層次結構?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class s {
public:
s(const string& str) : value {str} {}
string value;
};
class t : public s
{
public:
t(const string& str) : s{"t: " + str} {}
};
int main(int argc, const char** argv) {
vector<s*> ss1
{
new s { "hello" },
new s { "there" }
};
vector<s> ss2
{
s { "greeting" },
s { "father" }
};
vector<s> ss3
{
{ "ahoy" },
{ "matey" }
};
vector<s> ss4
{
{ "bonjour" },
t { "mademouselle" }
};
for (auto &s : ss1) {
cout << "value: " << s->value << std::endl;
}
for (auto &s : ss2) {
cout << "value: " << s.value << std::endl;
}
for (auto &s : ss3) {
cout << "value: " << s.value << std::endl;
}
for (auto &s : ss4) {
cout << "value: " << s.value << std::endl;
}
};
輸出是在這裏:
value: hello
value: there
value: greeting
value: father
value: ahoy
value: matey
value: bonjour
value: t: mademouselle
,我不明白的事情是,ss4
僅僅是一個vector<s>
,可是我能夠派生類t
存儲在它的內部。這怎麼可能?
我不確定這是否真的是重複的。這個問題有兩個部分,第一個部分是派生類型可能被分配給基類型的重複部分。但是在標題中還有另一個:*爲什麼C++ 11支持初始化使用基於堆棧的類層次結構?* - 在使用std :: initializer_list構造函數時應該編譯代碼嗎? –