引用静态const数据对象

时间:2012-06-05 14:14:04

标签: c++

我有一组存储静态const数据成员的实用程序类。现在我需要在函数类中使用这些数据成员。我打算使用引用(不要指针)静态const对象,但继续得到下面的错误。你能指出代码中的逻辑/技术错误吗?

#include <string>

class staticData
{
  public:
   static const int cs = 1;
   static const staticData data1;

  private:
   staticData(int id_): _id(id_)   //NOTE: Private constructer, static access only!!
   { }

   int _id;
};

const staticData staticData::data1(1001);

class testReference
{
  public:
    testReference(): _member(staticData::data1)
    {}

  private:
    staticData& _member;
};

从类型为“静态数据”

的表达式初始化类型为âstaticData&amp;â的引用无效

2 个答案:

答案 0 :(得分:2)

您尝试通过非const引用引用const对象。

因此,原始对象可以通过引用进行修改,因为引用是非const,因此您违反了将对象声明为const时所做的合同。

有两个选项:

  • const
  • 中删除static const staticData data1;
  • 制作参考constconst staticData& _member;

编辑:

根据您的评论,您可以:

class testReference
{
  public:
    testReference(): _member(&staticData::data1)
    {}

  private:
    staticData const * _member;
};

这样,您可以更改_member指向的内容(不能使用引用),但您无法更改对象本身。

答案 1 :(得分:1)

_member是允许变异的参考。 data1是不可变的。提供只读对象的可写视图是不可能的。