【问题标题】:Issues with Reference Type Static Data Member, could be compiler bug引用类型静态数据成员的问题,可能是编译器错误
【发布时间】: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&amp;
  • 不,只是为了测试问题。如果我将'global'更改为signed int,没问题。所以,它看起来像一个错误,但我想再次确认
  • 它看起来确实像一个错误。通过将unsigned int 绑定到signed int const&amp;,应创建一个临时的unsigned int,并将其生命周期扩展到目标引用变量(K::iref)。看起来 MSVC 几乎没有执行生命周期延长。
  • 想知道 MSVC 团队是否在四处窥探 SO 寻找错误投诉。我应该以某种方式正式通知他们这个问题吗?
  • 是的,请提交错误:connect.microsoft.com/VisualStudio

标签: c++ visual-c++ static-members compiler-bug


【解决方案1】:

你只需要机会

const int& k::iref

k::iref

并且你需要在声明时初始化变量,而不是超出其范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多