相关疑难解决方法(0)

为什么C++不允许使用匿名结构?

一些C++编译器允许匿名联合和结构作为标准C++的扩展.这有点语法糖,偶尔会非常有帮助.

阻止它成为标准一部分的理由是什么?是否存在技术障碍?一个哲学的?或者仅仅是不足以证明它的合理性?

这是我正在谈论的样本:

struct vector3 {
  union {
    struct {
      float x;
      float y;
      float z;
    };
    float v[3];
  };
};
Run Code Online (Sandbox Code Playgroud)

我的编译器会接受这个,但它警告"无名结构/联合"是C++的非标准扩展.

c++ struct unions

87
推荐指数
3
解决办法
5万
查看次数

为什么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被视为封闭的成员structunion(如果封闭结构本身是匿名的,则递归地).

C++ 11的理由是什么,还包括匿名结构?当然,它们只是非常有用(主要是在工会内部,以消除标识符的输入struct).但它们似乎是对规范的明显补充(以及已经由许多编译器实现的规范),它们肯定必须经过讨论,至少是为了保持与C11标准的兼容性.那他们为什么不加?

c c++ anonymous-types c++11 c11

43
推荐指数
1
解决办法
1万
查看次数

联合如何根据对象列表确定最大大小?

我不确定问题是否妥善,因为我理解了如何,但我不知道用不明白的东西写问题.这里是:

我有一些课程:

class Animal{};
class Rabbit{}: public Animal;
class Horse{}: public Animal;
class Mouse{}: public Animal;
class Pony{}: public Horse;
Run Code Online (Sandbox Code Playgroud)

我的目标是从此对象列表中找到最大大小,以便在之后的内存分配中使用它.我已将每个sizeof对象存储在一个数组中,然后获取数组的最大值.上级(我发送代码进行审核)建议我使用union来在编译前的时间找到最大的大小.这个想法对我来说似乎很好,所以我这样做了:

typedef union
{
  Rabbit rabbitObject;
  Horse horseObject;
  Mouse mouseObject;
  Pony ponyObject;
} Size;
Run Code Online (Sandbox Code Playgroud)

...因为union根据最大元素分配内存.下一个建议就是这样做:

typedef union
{
   unsigned char RabbitObject[sizeof(Rabbit)];
   unsigned char HorseObject[sizeof(Horse)];
   unsigned char MouseObject[sizeof(Mouse)];
   unsigned char PonyObject[sizeof(Pony)];
} Interesting;
Run Code Online (Sandbox Code Playgroud)

我的问题是:

Interestingunion 如何获得对象的最大大小?对我来说,创建一个unsigned char类型的数组是没有意义的sizeof(class).为什么第二个选项可以解决问题,而之前的联盟却没有?背后发生了什么,我想念?

PS:条件是这样的,我不能亲自问这个家伙.

先感谢您

c++

1
推荐指数
1
解决办法
127
查看次数

标签 统计

c++ ×3

anonymous-types ×1

c ×1

c++11 ×1

c11 ×1

struct ×1

unions ×1