这在 C + + 11中可能意味着什么?
struct : bar {} foo {};
首先,我们采用一个标准的抽象 UDT (用户定义类型) :
struct foo { virtual void f() = 0; }; // normal abstract type foo obj; // error: cannot declare variable 'obj' to be of abstract type 'foo'
让我们回想一下,我们可以在定义 UDT 的同时实例化它:
struct foo { foo() { cout << "!"; } }; // just a definition struct foo { foo() { cout << "!"; } } instance; // so much more // Output: "!"
让我们结合这些示例,回想一下我们可以定义一个包含 没有名字的 UDT:
struct { virtual void f() = 0; } instance; // unnamed abstract type // error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
我们不再需要关于匿名 UDT 的证明,因此我们可能会丢失纯虚函数。也将 instance重命名为 foo,剩下的是:
instance
foo
struct {} foo;
快了。
现在,如果这个匿名 UDT 从某个基础派生出来会怎样?
struct bar {}; // base UDT struct : bar {} foo; // anonymous derived UDT, and instance thereof
最后,C + + 11引入了 扩展初始化程序扩展初始化程序,这样我们就可以做下面这些令人困惑的事情:
int x{0};
还有这个:
int x{};
最后,这个:
这是一个从 bar 派生的未命名结构,实例化为 foo,并使用空白初始值设定项。
这意味着:
bar
anonymously