这可能在C++ 11中意味着什么?
struct : bar {} foo {};
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 261
首先,我们将采用沼泽标准的抽象UDT(用户定义类型):
struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'
Run Code Online (Sandbox Code Playgroud)
让我们回想一下,我们可以在定义UDT的同时实例化UDT:
struct foo { foo() { cout << "!"; } }; // just a definition
struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"
Run Code Online (Sandbox Code Playgroud)
让我们结合这些例子,回想一下我们可以定义一个没有名字的UDT :
struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
Run Code Online (Sandbox Code Playgroud)
我们不再需要有关匿名UDT的证明,因此我们可能会丢失纯虚函数.也改名instance为foo,我们留下:
struct {} foo;
Run Code Online (Sandbox Code Playgroud)
越来越接近.
现在,如果这个匿名UDT来自某个基础呢?
struct bar {}; // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof
Run Code Online (Sandbox Code Playgroud)
最后,C++ 11引入了扩展的初始化程序,这样我们可以做到这样的混乱:
int x{0};
Run Code Online (Sandbox Code Playgroud)
还有这个:
int x{};
Run Code Online (Sandbox Code Playgroud)
最后,这个:
struct : bar {} foo {};
Run Code Online (Sandbox Code Playgroud)
这是一个从bar派生的未命名结构,实例化为foo,带有空白初始值设定项.
Fru*_*nsi 104
这定义:
baranonymously)除了定义它之外什么都没有定义barstruct : bar {} foo {};
Run Code Online (Sandbox Code Playgroud)