8得票1回答
static_cast转换构造函数和转换运算符的区别

在阅读完这篇文章之后,我尝试使用static_cast进行这种转换: class A; class B { public: B(){} B(const A&) //conversion constructor ...

8得票2回答
为什么我们要使用static_cast转换为NULL

当我尝试阅读QP/CPP代码时,我发现了下面这行代码。 QTimeEvt *t; // ... if (t == static_cast<QTimeEvt *>(0)) { 为什么他们要将0进行静态转换(static_cast)?如果他们想要检查NULL,我们可以直接这样做...

8得票4回答
虚函数和强制类型转换为void以及再次转回原类型

我目前正在处理一个遗留的C++代码库。在这个代码库中,对象的指针被转换为void指针,然后存储在一个C库中。 考虑以下代码: class interface { public: virtual void foo() { std::cout << "Interface"...

8得票3回答
使用C++风格的静态转换(static_cast)或重新解释转换(reinterpret_cast),将Void*转换为TYPE*。

所以,如果你要从Void* 转换成 Type* 或者从Type* 转换成 Void*,应该使用哪个呢? void func(void *p) { Params *params = static_cast<Params*>(p); } 或者 void func(voi...

8得票5回答
将无符号数解释为有符号数

我正在开发一个嵌入式平台(ARM)并且在处理位模式时必须小心谨慎。假设这一行代码超出了我的控制范围: uint8_t foo = 0xCE; // 0b11001110 将其解释为无符号数,这将是206。但实际上它是有符号的,类似于-50。我如何继续使用该值作为有符号数...

8得票3回答
将Derived*转换为void*再转换为Base*的static_cast

我想将派生类成员的指针转换为void*,然后再将其转换为基类的指针,就像下面的示例中所示: #include <iostream> class Base { public: void function1(){std::cout<<"1"<...

8得票3回答
为什么允许将void*进行static_cast转换成另一种类型?

我刚刚在看这个帖子:简单的c++指针转换。 这让我想起了为什么不允许在不通过void*中间步骤的情况下使用static_cast将不同类型的指针进行转换(除非允许)。在我看来,应该要么两种都被允许,要么两种都不被允许。以下是一个例子: char* cs; unsigned...

8得票6回答
C++什么时候应该优先使用两个链接的static_cast而不是reinterpret_cast?

首先,这不是为什么在C++中我们有reinterpret_cast,而两个链接的static_cast就可以完成它的工作?的重复问题。 我知道有些情况下,即使使用两个链接的static_cast也无法实现reinterpret_cast所做的事情。但是否存在一种情况,在其中我应该优先选择两个...

8得票2回答
我可以提供一个实际的例子,其中使用void*进行转换有效,而reinterpret_cast则无法实现。该例子涉及到IT技术。

这里有一些与交叉转换相关的问题(从T1*到不相关的T2*),例如这个和这个。通常的答案是:使用reinterpret_cast是实现定义的,而转换为void*,然后进行static_cast是明确定义的。然而,我没有看到任何真正的例子,说明当使用reinterpret_cast时会出现什么问题...

7得票2回答
使用static_cast实现的转换运算符

我在这里提出问题,是关于我在这里提出的问题。 问题很简单。假设你有两个这样的类: template < class Derived > class Base { ... operator const Derived&() const { return stati...