- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设 static_cast 永远不会抛出异常是否安全?
对于 int 到 Enum 的转换,即使无效也不会抛出异常。我可以依赖这种行为吗?以下代码有效。
enum animal {
CAT = 1,
DOG = 2
};
int y = 10;
animal x = static_cast<animal>(y);
最佳答案
对于这种特定类型的转换(枚举类型的组成部分),可能会抛出异常。
C++ standard 5.2.9 Static cast [expr.static.cast] paragraph 7
A value of integral or enumeration type can be explicitly converted to an enumeration type. The value is unchanged if the original value is within the range of the enumeration values (7.2). Otherwise, the resulting enumeration value is unspecified / undefined (since C++17).
请注意,自 C++17 以来,此类转换实际上可能会导致未定义的行为,这可能包括抛出异常。
换句话说,如果您确保整数实际上代表一个有效的枚举值,那么您使用 static_cast
从整数中获取枚举值的特定用法在 C++17 之前是可以的,并且总是可以的通过某种输入验证程序的值。
有时输入验证程序完全不需要 static_cast
,如下所示:
animal GetAnimal(int y)
{
switch(y)
{
case 1:
return CAT;
case 2:
return DOG;
default:
// Do something about the invalid parameter, like throw an exception,
// write to a log file, or assert() it.
}
}
请考虑使用类似上述结构的东西,因为它不需要强制转换,并让您有机会正确处理边界情况。
关于c++ - static_cast 可以在 C++ 中抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11551853/
对引用 static_cast 的引用是否与指向指针 static_cast 的指针具有相同的运行时间成本? 例如 class B; class A: public class B; A obj; A
在下面的示例中,编译器接受 static_cast 向下转换,导致未定义的行为,而我认为 static_cast 完全是为了安全(C 风格转换无法提供) . #include class Base
在以下代码中(取自有效的 C++): class A { .... char& operator[](std::size_t position) // now just cal
我正在尝试理解 Pybind11 docs here 中使用的静态转换.具体来说,他们使用语法 static_cast(&Pet::set) 因为在我努力解释并应用到我自己的代码之前我还没有见过这种语
本题不涉及多态,即不涉及虚方法,不涉及虚基类。以防万一,我的案子不涉及这些。 假设我有一个类 Derived它有一个明确的可访问父类型 Base ,没有多态性(没有虚方法,没有虚基类),但可能涉及间接
我看到有人建议使用 static_cast(static_cast(p))而不是重新解释类型转换。 我不明白为什么这样更好,谁能解释一下? 为了便于讨论,这里有一个需要 reinterpret_cas
如果我执行以下操作,一切正常: char* cp = "abc"; void* vp = NULL; vp = static_cast(cp);//ok cp = static_cast(vp);//
让我们有一个名为 Y 的重载函数: void Y(int& lvalue) { cout void f(T&& x) { Y( static_cast(x) ); // Using sta
当你动态分配了一个 char * 类型的缓冲区并想将它转换为特定类型时,你是否应该使用类似的东西 reinterpret_cast(char *) 或者类似的东西 static_cast(static
这是来自 std::enable_if 教程中的示例。 这里有更多的上下文: // handle signed types template auto incr1(Int& target, Int a
我正在阅读 Scott Meyers 的 Effective C++ 3rd。 在第 3 项中: Use const whenever possible. In order to use const
我是 C++ 编程的初学者...我正在练习,遇到了这个问题...这里我尝试在复合运算符上使用 static_cast...我实际上正在尝试除两个整数并得到双倍的答案...这是代码: #include
如果我有两个类: 1) 员工 2) 工程师是派生 从员工 3) 经理是派生 从员工 我被告知(并自己尝试过)以下内容无法编译: Employee employee("John Smith"); Eng
我正在尝试实现一类数值 vector 。我正在使用类似于 STL vector 的 Qt 模板 QVector typedef float ArithmeticF; typedef QVector V
是否使用 static_cast 将 const unsigned char& 转换为 const unsigned long long& 已定义? constexpr unsigned char a
#include class A { public: A() { std::cout (a_obj); // This isn't safe. b_obj
我在我们的生产环境中遇到了以下代码结构(但是大大简化了)。 #include typedef struct { char entry[10]; } inn_struct; typedef s
我有以下两个类: class B; class A { public: A(); operator B() const; }; class B {
我有以下代码片段 class base { public: virtual void MyMethod() { std::cout (b); d->MyMeth
这是一个 discussion on stackoverflow四种显式转换中的一种。但我在投票最多的答案中遇到了一个问题。 引用自投票最多的 wiki 答案: static_cast can als
我是一名优秀的程序员,十分优秀!