10得票2回答
在C++中为什么不能使用static_cast<int&>将整数引用参数传递给函数?

我在一个C++程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取它。一开始我把它声明为int类型,但是在代码审查时被要求将其类型更改为枚举(ControlSource)。我这样做了,但它破坏了Get()函数——我注意到使用C风格的int&amp;转换可以解决问题,但当我尝试使用st...

10得票2回答
C++中整数转浮点数的精度损失如何定义?

我有一个问题针对下面的代码片段:long l=9223372036854775807L; float f=static_cast&lt;float&gt;(l); 根据IEEE754标准,长整型值无法被精确地表示。 我的问题是如何处理有损转换: 是否采用最接近的浮点表示? 是否采用下一个...

9得票2回答
reinterpret_cast对于几乎所有POD数据类型是否足够支持布局兼容性

我正在学习 static_cast 和 reinterpret_cast 相关的知识。 如果我没记错的话,标准(9.2.18)说 reinterpret_cast 用于 pod 数据是安全的: 使用 reinterpret_cast 适当转换后的指向 POD-struct 对象的指针指向...

9得票1回答
转换为相同类型

我有这样一个案例: using T = classA; //T could be classA and could be `classB` in other platforms. T a; auto x = static_cast&lt;classB&gt;(a); 如果 T 是 cla...

9得票2回答
CRTP是否没有编译时检查?

我尝试使用“奇异递归模板模式”来实现静态多态性,但注意到static_cast&lt;&gt;通常在编译时检查一个类型是否能够转换成另一个类型,却未能检查基类声明中的打字错误,从而允许将基类向下转型为其任意子类: #include &lt;iostream&gt; using namesp...

9得票1回答
为什么当将函数 static_cast(ing) 为 void* 时,编译器的行为会有所不同?

以下代码在VSC++2017中编译时没有任何错误,在gcc 7.3.0中无法编译 (error: invalid static_cast from type 'int(int)' to type 'void*' void* p = static_cast&lt;void*&gt;(func)...

9得票2回答
用C++替换delete关键字,误传信息

我正在尝试解决一个类中包含SSE优化成员的16字节对齐问题,并且已经解决了。但令我困扰的是,我在许多在线示例中发现了一行代码,这行代码对我来说似乎完全是多余的,但在许多地方都重复出现。 public: void* operator new (size_t size)throw (std::b...

9得票5回答
如何在CRTP中实现编译时检查向下转型是否有效?

我有一个普通的CRPT(请不要被访问限制所分散注意力 - 问题与此无关): template&lt;class Derived&gt; class Base { void MethodToOverride() { // generic stuff he...

9得票1回答
为什么在这里使用static_cast而不是reinterpret_cast很重要?

在Raymond Chen的博客回复中, 一个提问者指出: Raymond,我认为C++示例不正确,因为根据ISO C ++ 2003标准(10-3,第168页),派生类中基类子对象的位置是未指定的,并且您假设基类子对象始终位于开头。 C示例在C ++中也可以正常工作,因此我会坚持使用它...

9得票2回答
静态转换指针值

在当前的标准草案(以及C++17)中,this讲述了关于static_cast一个void *的内容: 类型为“指向cv1 void”的prvalue可以转换为类型为“指向cv2 T”的prvalue,其中T是对象类型,cv2与cv1相同或比cv1更高的cv限定符。如果原始指针值表示内存中...