【发布时间】:2016-12-10 09:44:58
【问题描述】:
我想一个类的静态数据成员可以是一个引用类型,像这样初始化为一个全局变量:
#include <iostream>
#include <stdio.h>
const unsigned int global =0x1fee;
struct K {
int a;
static const int & iref;
};
const int & K::iref=global;
int main()
{
printf("%d\n",K::iref);
return 0;
}
但在我的 VC++test 中,它可以编译但在执行时会产生异常。它只是VC ++的一个错误吗?我做错什么了吗?
【问题讨论】:
-
您是否有意尝试将
unsigned int绑定到signed int&? -
不,只是为了测试问题。如果我将'global'更改为signed int,没问题。所以,它看起来像一个错误,但我想再次确认
-
它看起来确实像一个错误。通过将
unsigned int绑定到signed int const&,应创建一个临时的unsigned int,并将其生命周期扩展到目标引用变量(K::iref)。看起来 MSVC 几乎没有执行生命周期延长。 -
想知道 MSVC 团队是否在四处窥探 SO 寻找错误投诉。我应该以某种方式正式通知他们这个问题吗?
-
是的,请提交错误:connect.microsoft.com/VisualStudio
标签: c++ visual-c++ static-members compiler-bug