Jef*_*den 43 c c++ anonymous-types c++11 c11
C11支持匿名结构,如下所示:
struct Foo
{
struct
{
size_t x, y;
};
};
struct Foo f;
f.x = 17;
f.y = 42;
Run Code Online (Sandbox Code Playgroud)
基本上,这样的成员struct被视为封闭的成员struct或union(如果封闭结构本身是匿名的,则递归地).
C++ 11的理由是什么,还包括匿名结构?当然,它们只是非常有用(主要是在工会内部,以消除标识符的输入struct).但它们似乎是对规范的明显补充(以及已经由许多编译器实现的规范),它们肯定必须经过讨论,至少是为了保持与C11标准的兼容性.那他们为什么不加?
Nic*_*las 44
随着两种语言的发展,在C++和C之间保持兼容性的努力很少.请注意,自1999年以来,可变长度堆栈数组已在C中,但未包含在C++ 11中.虽然它们通常不会引入相互矛盾的东西,但C++委员会并没有完全反过来确保C++ 11与C89之外的C版本兼容.
此外,这个功能在C++中会非常复杂,因为a struct只不过是一个class.一个匿名的struct/class应该具有常规struct/class的所有功能,是吗?否则,有什么意义呢?
构建无名者意味着什么struct?你会如何定义构造函数?简单的事情:
struct Foo
{
struct
{
size_t &x;
};
};
Run Code Online (Sandbox Code Playgroud)
根本不可能,因为内部struct没有构造函数.并且没有办法指定一个.A struct不能构建其中的另一个成员struct.
对于这样的事情:
struct Foo
{
size_t outer;
struct
{
void SomeFunc();
size_t x;
};
};
Run Code Online (Sandbox Code Playgroud)
什么this指针SomeFunc得到?什么类型的this,无名和未命名的类型?你怎么会SomeFunc在结构之外定义?名字SomeFunc不能Foo::SomeFunc,因为SomeFunc生活在一个内在的范围内.
这对C++来说太复杂了.当然不值得为添加复杂性而烦恼.
| 归档时间: |
|
| 查看次数: |
10248 次 |
| 最近记录: |