在for循环初始化语句中声明未命名结构体
Unnamed struct declaration inside for loop initialization statement
在一个SO线程中,我看到使用未命名的struct
作为for循环中不同类型的多个变量的占位符:
for(struct {
int i;
double d;
char c;
} obj = { 1, 2.2, 'c' };
obj.i < 10;
++obj.i)
{
...
}
使用g++可以很好地编译。
这是标准的c++ 03语法吗?
可以在任何可以使用结构体的地方使用未命名结构体——唯一的区别是它不会获得可以在其他地方使用的名称。你可以在任何可以使用类型的地方声明一个新类型。在大多数地方这样做可能不是特别有意义,但那是另一回事。
我不推荐这样做,除非在非常特殊的情况下,但它是有效的
下面的代码将在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("%dn", 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("%dn", t.a);
}
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- C++中未命名函数指针的语法
- 未命名的非类型模板参数有什么意义?
- C++包含函数标头会给出错误'__dest'未命名类型
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- Foreward 声明在未命名命名空间中定义的类
- 在未命名的命名空间中声明变量
- 向前声明未命名结构的 typedef
- C++如何声明一个临时的未命名、未初始化的数组
- 未命名的命名空间与全局声明
- 强制构造像“Foo(12,3);”这样的未命名变量仍然是一个声明符
- typedef声明定义未命名类时链接失败
- 如何转发声明未命名命名空间中的类
- 名称空间具有未命名的名称空间,声明了相同的变量
- 为什么在未命名的命名空间中声明变量后无法在全局范围内定义变量?
- 在for循环初始化语句中声明未命名结构体
- 在同一声明性区域中定义的两个未命名的名称空间
- 未命名结构的前向声明
- 错误:'vector'未命名类型/错误:'<'令牌之前的预期','或'...'/错误:尚未声明'vector'