c++ 11是否允许非匿名联合包含静态数据成员?
Does C++11 allow non-anonymous unions to contain static data members?
在c++ 11中,我声明了以下联合:
union U4 {
char c;
int i;
static int si;
};
当我用g++ 4.7.0使用-std=c++11 -pedantic-errors编译这段代码时,我得到了以下错误(稍微编辑):
据我所知,FDIS (N3242)没有显式地允许命名联合的静态数据成员。但是我也没有看到FDIS 禁止命名联合的静态数据成员。FDIS确实反复提到可以用"非静态数据成员"做什么[第9.5节第1段]。相比之下,这表明标准允许联合的静态数据成员。错误:本地类union U4不能有静态数据成员int U4::si ' [-fpermissive]
error: ' U4::si '可能不是静态的,因为它是union的成员
我对联合的静态数据成员没有任何想法。如果我需要的话,我可以用包含匿名联合的类获得足够接近的效果。我只是想理解这个标准的意图。
谢谢你的帮助
是允许的。标准的第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;
}
LiveWorkSpace的输出。请注意,它可以在Clang 3.2上编译,但不能在gcc 4.8.0或Intel 13.0.1上编译。
相关文章:
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 如果函数包含静态变量,为什么编译器不执行内联?
- 拒绝包含某些公共静态数据成员的类型
- 包含不同大小静态数组的类的多个实例
- 扩展包含静态函数的类
- 是否可以链接到,包括和使用静态库,而无需额外包含标头/文件
- 如何使用 mongo-cxx-driver 的 **insert** 函数将包含静态数据的多维数组插入到数据库中
- 为什么cmake_link_libraries包含静态库
- 如何在 MAC OS X 上的 CMAKE 项目中包含 C 静态库
- OpenCV和Visual Studio 2015:为什么包含静态库不起作用
- 纯抽象类可以包含静态常量、静态方法或非虚析构函数吗?
- c++无法为包含静态变量的对象设置NULL指针
- c++ 11是否允许非匿名联合包含静态数据成员?
- Caffe是否包含静态初始化失败?
- 如何在c++中强制包含静态库中的静态对象(msvc11)
- 在预处理器指令中包含静态库
- 头文件包含静态分析工具