在init方法中绕过const

Jas*_*n S 6 c++ const

所以我不能在我的类构造函数中使用初始化器,因为使用了数组,所以我决定使用一个init()方法.现在我有一个不同的问题.我有一个这样的课:

class EPWM {
private:
   volatile EPWM_REGS* const regs;
public:
   void init(volatile EPWM_REGS* _regs);
};
Run Code Online (Sandbox Code Playgroud)

我需要init()通过初始化来实现,regs = _regs;但我不能因为const.有没有办法在我的init方法中强制赋值?我想保留const关键字,所以我不小心在其他地方重新分配.

编辑:尽管我想使用构造函数+初始化程序,这将解决这个问题(我的代码用来做这个),我不能因为我有另一个类,它有一个EPWM对象数组,我无法初始化这些对象,因为C++不支持数组成员的初始化程序.(再看看我刚才就这个问题问过的另一个问题.)

使用EPWM的上下文是这样的:

class PwmGroup {
private:
   EPWM *epwm;

   void init(EPWM *_epwm) { epwm = _epwm; }
};

/* ... */
// main code:

EPWM epwm[3];
PwmGroup pwmGroup;

{
   // EPwm1Regs, EPwm2Regs, EPwm3Regs are structs
   // defined by TI's include files for this processor
   epwm[0].init(&EPwm1Regs);
   epwm[1].init(&EPwm2Regs);
   epwm[2].init(&EPwm3Regs);
   pwmGroup.init(epwm);
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*ght 4

您可以考虑const_cast并指出,但最好很少使用它。就像是...

EPWM_REGS** regsPP = const_cast<EPWM_REGS**>(&regs);
*regsPP = _regs;
Run Code Online (Sandbox Code Playgroud)

  • 这也是 const_cast 不能保证工作的情况之一,因为您要转换 const 的东西实际上是 const (而不是在方法参数中添加 const )。 (3认同)