在 C++11 中,我声明以下联合:
union U4 {
char c;
int i;
static int si;
};
当我使用 -std=c++11 -pedantic-errors 使用 g++ 4.7.0 编译此代码时,出现以下错误(经过少量编辑):
错误:本地类“union U4”不应具有静态数据成员“int U4::si”[-fpermissive]
错误:‘U4::si’可能不是静态的,因为它是联合体的成员
FDIS (N3242) 没有明确allow据我所知,命名联合的静态数据成员。但我也不明白 FDIS 在哪里不允许命名联合的静态数据成员 FDIS 确实反复提到可以使用“非静态数据成员”[第 9.5 节第 1 段]执行的操作。相比之下,这表明该标准允许联合体的静态数据成员。
我不认为联合体的静态数据成员有任何用处。如果我需要它,我可能可以通过包含匿名联合的类获得足够接近的效果。我只是想了解该标准的意图。
谢谢您的帮助。
是的,这是允许的。该标准第 9 节使用了该词class
对于类、结构和联合,除非另有明确说明。对静态联合成员的唯一限制是本地联合 (9.4.2/5) 和匿名联合 (9.5/5)。
#include <iostream>
union Test
{
static int s;
};
int Test::s;
int main()
{
Test::s = 1;
std::cout << Test::s;
}
输出开启生活工作空间 http://liveworkspace.org/code/nwjRT%246。请注意,它可以在 Clang 3.2 上编译,但不能在 gcc 4.8.0 或 Intel 13.0.1 上编译。看来这是一个 gcc/Intel 错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)