有什么用途:
static_castdynamic_castconst_castreinterpret_cast(type)valuetype(value)如何决定在哪些特定情况下使用哪个?
我已经编写了近二十年的C和C++代码,但这些语言的一个方面我从未真正理解过.我显然使用常规演员表,即
MyClass *m = (MyClass *)ptr;
Run Code Online (Sandbox Code Playgroud)
到处都是,但似乎有两种其他类型的演员,我不知道其中的区别.以下代码行之间有什么区别?
MyClass *m = (MyClass *)ptr;
MyClass *m = static_cast<MyClass *>(ptr);
MyClass *m = dynamic_cast<MyClass *>(ptr);
Run Code Online (Sandbox Code Playgroud) 什么是类型转换?什么是类型转换?
我什么时候应该使用它们?
细节:对不起,如果这是一个明显的问题; 我是C++的新手,来自红宝石背景,习惯于to_s等等to_i.
我正在做一堆应用数学/信号处理/算法 C++ 代码。
我已启用-Wconversion编译器警告以捕获诸如类型double到类型数字的运行时转换之类的问题int32_t。
显然,在这些转换过程中我总是很担心,因为:
int32_t在本例中))每当我担心这种转换时,我通常使用单行检查:
boost::numeric_cast<DestType>(SourceType)
Run Code Online (Sandbox Code Playgroud)
但是,我想在没有boost.
直接的 C++ 有等价的boost::numeric_cast<DestType>(SourceType)吗?
如果直接的 C++ 没有等价物,那么什么是可比较的非boost实现?
我认为有点类似的检查基本上是一个模板函数,它有一个 if 语句来检查输入参数是否正溢出或负溢出(通过使用std::numeric_limits<DestType> ::max()and::min()和引发异常)。