循环初始化语句中的未命名结构声明

时间:2013-05-18 16:19:17

标签: c++ for-loop struct anonymous-class

在其中一个SO线程中,我看到使用未命名的struct作为占位符,用于for循环中不同类型的多个变量:

例如:

for(struct {
      int i;
      double d;
      char c;
    } obj = { 1, 2.2, 'c' };
    obj.i < 10;
    ++obj.i)
{
  ...
}

compiles fine与g ++。
这是标准的C ++ 03语法吗?

2 个答案:

答案 0 :(得分:3)

您可以在任何可以使用结构的地方使用未命名的结构 - 唯一的区别是它没有获得可以在其他地方使用的名称。你可以在任何可以使用类型的地方声明一个新类型。在大多数地方这样做可能没什么特别的意义,但这是另一回事。

除了非常特殊的情况外,我不会完全推荐这个,但它是有效的。

答案 1 :(得分:-1)

下面的代码适用于C ++(g ++ 5.4.0)。

  

http://rextester.com/ELWLF59792

//g++  5.4.0

#include <iostream>

#include <stdio.h>

int main()
{
      int i = 0;

      for(struct st{ int a[9]; }t;i<3;i++)
            printf("%d\n", t.a);
}

以下代码适用于C(gcc 5.4.0)。

//gcc 5.4.0

#include <stdio.h>

int main()
{
      int i = 0;
      struct st{ int a[9]; }t;
      for(;i<3;i++)
            printf("%d\n", t.a);
}