Apa artinya ini dalam C ++ 11?
struct : bar {} foo {};
Apa artinya ini dalam C ++ 11?
struct : bar {} foo {};
Jawaban:
Pertama, kami akan mengambil UDT abstrak standar rawa (Jenis yang Ditentukan Pengguna):
struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'
Mari kita juga ingat bahwa kita dapat membuat instance UDT pada saat yang sama kita mendefinisikannya:
struct foo { foo() { cout << "!"; } }; // just a definition
struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"
Mari kita gabungkan contoh-contohnya, dan ingat bahwa kita dapat mendefinisikan UDT yang tidak memiliki nama :
struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
Kami tidak memerlukan bukti tentang UDT anonim lagi, sehingga kami dapat kehilangan fungsi virtual murni. Juga mengganti nama instance
menjadi foo
, kita dibiarkan dengan:
struct {} foo;
Mendekat.
Sekarang, bagaimana jika UDT anonim ini berasal dari suatu basis?
struct bar {}; // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof
Akhirnya, C ++ 11 memperkenalkan inisialisasi yang diperluas , sehingga kami dapat melakukan hal-hal membingungkan seperti ini:
int x{0};
Dan ini:
int x{};
Dan akhirnya, ini:
struct : bar {} foo {};
Ini adalah struktur tanpa nama yang berasal dari bar, dipakai sebagai foo dengan penginisialisasi kosong.