gpt4 book ai didi

c++ - 用于枚举的正确转换是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:33:34 25 4
gpt4 key购买 nike

如果我没记错的话,C 风格转换只不过是一组有序的转换static_cast、dynamic_cast、reinterpret_cast、static_cast...,考虑:

enum NUMBERS
{
NUMBER_ONE,
NUMBER_TWO
};

void Do( NUMBERS a )
{
}

int _tmain(int argc, _TCHAR* argv[])
{

unsigned int a = 1;
Do( a ); //C2664
return 0;
}

C-Style 转换就可以了

Do( (NUMBERS)a );

我想知道的是,要进行的正确非 C 样式转换是什么,为什么?

最佳答案

正确的做法是:

static_cast<NUMBERS>(a)

因为:

8) Integer, floating-point, or enumeration type can be converted to any enumeration type (the result is unspecified if the value of expression, converted to the enumeration's underlying type, is not one of the target enumeration values)

来源:http://en.cppreference.com/w/cpp/language/static_cast

dynamic_cast 使用 RTTI 进行运行时检查,因此它仅适用于具有至少一个虚方法的类。

reinterprest_cast 旨在告诉编译器将一 block 特定的内存视为某种不同的类型,而无需任何实际的运行时转换。

关于c++ - 用于枚举的正确转换是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com