【问题标题】:how to convert const Uint8* to Uint8* [duplicate]如何将 const Uint8* 转换为 Uint8* [重复]
【发布时间】:2020-02-29 20:05:15
【问题描述】:

我认为这是不言自明的。我需要能够将const Uint8 * 转换为Uint8 *。我试过简单地将const Uint8 * 放入const Uint8 * 并使用static_cast。但是,每次它都给我这个错误:

error: 
  assigning to 'Uint8 *' (aka 'unsigned char *') from incompatible type
  'const Uint8 *' (aka 'const unsigned char *')
keyboardstate = SDL_GetKeyboardState(NULL);

有人知道如何成功转换吗?

【问题讨论】:

  • 使用const_cast...
  • 你为什么要把一个不可变的东西转换成一个可变的东西?这对我来说似乎是一个错误。
  • @KamilCuk const_cast 虽然很危险。如果对象最初不是非常量,那么在修改对象时丢弃 const 是未定义的行为。
  • @JesperJuhl 这是不正确的。仅当对象实际被修改时,它才是 UB。 const_cast 在使用不支持 const 的库时尤为重要。
  • 我必须在实施 const_cast 解决方案后同意问题已解决。加上我的游戏的整个事件系统都被它修复了。所以我说这是一个非常好的解决方法,因为我现在知道我的游戏正在按应有的方式运行,所以我现在可以整天玩下去了。

标签: c++ sdl


【解决方案1】:

您可以为此使用const_cast,例如:

Uint8* foo = const_cast<Uint8*>(bar);

然而:你确定你做的事情真的是正确的吗?请确认您在移除 constness 后没有修改基础值,因为这是未定义的行为。

[ 注意:根据对象的类型,通过指针、左值或指向数据成员的指针的写操作是由丢弃 const 限定符的 const_cast 产生的,可能会产生未定义的行为([dcl.type.cv] )。 ——尾注] [expr.const.cast.6]

【讨论】:

  • 谢谢你的工作
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
相关资源
最近更新 更多