我一直在对函数输入参数使用枚举,但是我注意到这可能非常危险。
例如:
enum class MYENUM {
X1 = 0, X2
};
std::map<MYENUM, int> mymap;
//init mymap here with known enum values of X1 and X2
int MyFunc(const MYENUM& input) {
return mymap.at(input);
}
int main() {
MyFunc(static_cast<MYENUM>(10000));
}
因此10000
不是有效的enum
值。您将如何亲自找到解决方案?您是否将map
访问权限包含在try
块中,并catch
将该exception
括起来?如果我有许多函数可以使用用户输入的枚举值访问容器信息,该怎么办-然后您也将try catch
放在所有这些函数中吗?
最佳答案
How would you personally find a solution to this?
简单。引入类枚举的原因之一是类型安全-他们不会自动接受任何值。所以,你这里的代码
MyFunc(static_cast<MYENUM>(10000));
只是绕过了语言提供的安全性。解决方案很简单-请勿通过强制转换来避免安全性,并且编译器将不允许您使用错误的值。如果有人使用 Actor 表-这不是您的问题。有人可以通过多种方式绕过内置类型的安全性并为功能提供完全虚假的值。图书馆作家对此无能为力。
关于c++ - 使用static_cast创建的枚举调用C++函数的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63490783/