我是一个相对的 C/C++ 菜鸟,但在 C# 和许多其他语言方面经验丰富,目前正在用 C++ 构建游戏引擎。
对于输入系统(键/鼠标/操纵杆),我有一个想法,即使用字符串文字来简化游戏特定输入事件的配置,而不是枚举。但我不完全确定 C 编译器将如何优化它 - 每次进行逐个字符的字符串比较可能效率低下。
这是基本思想 - 从设备事件到“游戏特定事件”的映射将在 std::map 中,带有 int/enum 键和 const char * 值:
Mappings[ KEY_X ] = "Jump";
Mappings[ KEY_Y ] = "Shoot";
Mappings[ MOUSE_1 ] = "Shoot";
这些可以是硬编码的,从配置文件加载,等等(字符串将简化解析和保存,以及添加新的事件类型)
然后在游戏中,我可以只处理游戏特定的事件:
if ( IsDown( "Jump" ) ) {
}
if ( IsSinglePress( "Shoot" ) ) {
}
问题是,我所有的字符串文字和 const char * 会被神奇地优化掉并最终像枚举或整数常量一样高效吗?例如
if ( IsDown( GAMEKEY_SHOOT ) ) {
// ...
}
还是会进行字符串比较等?我希望编译器会看到相同字符串文字的实例,将其存储一次,并在整个过程中使用单个指针值,但不确定。