问题标签 [static-cast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1030 浏览

c++ - 为什么要通过 static_cast 将数字转换为 double 的麻烦?

在我正在处理的代码中遇到了这个问题:

somethings 是doubles。)

怀疑有一个很好的理由去经历做事的麻烦

static_cast<double>(1)

等等,但似乎我可以少打很多字。

我不明白什么?

提前致谢。

0 投票
1 回答
536 浏览

casting - 来自...的无效转换 Objective-C++

我刚刚告诉 Xcode 将所有内容编译为 Objective-C++,现在我在转换时遇到了错误。

当我尝试使用static_cast<CFDictionaryRef>(aInPropertyValue)时,我什么也得不到。好像(这可能是真的)我没有正确使用它。

0 投票
5 回答
1579 浏览

c++ - 如何在 CRTP 中实现向下转换是否有效的编译时检查?

我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):

像往常一样打算这样使用:

现在这static_cast让我很困扰。我需要一个向下转换(不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。

但是,如果我以某种方式改变了层次结构并且演员现在变得无效怎么办?

在这种情况下,我可以以某种方式强制执行显式向下转换是否有效的编译时检查吗?

0 投票
2 回答
2076 浏览

c++ - 钻石层次结构中的低落

为什么static_cast不能从虚拟基地垂头丧气?

g++ 4.5 说:

解决方案是使用dynamic_cast? 但为什么。什么是理性?

-- 编辑 --
下面很好的答案。没有答案详细说明子对象和 vtables 最终是如何被订购的。以下文章为 gcc 提供了一些很好的示例:
http ://www.phpcompiler.org/articles/virtualinheritance.html#Downcasting

0 投票
1 回答
14028 浏览

c++ - C++ static_cast 运行时开销

请参阅下面的代码。

a)在这种情况下(简单继承,没有虚拟成员), B::df() 中的静态转换是否有任何开销(无论如何)?我发现类似问题的一些相互矛盾的答案,这就是我问的原因......

b)我正在考虑const M1 * func在 A 中设置私有并在 B 中引入一个新的私有字段const M2 * func以避免强制转换,但这会使事情复杂化并使智能指针的使用更加困难。你有没有更好的方法来避免演员阵容?

p>

p>

0 投票
6 回答
1331 浏览

c++ - C++ 我们什么时候应该更喜欢使用两个链接的 static_cast 而不是 reinterpret_cast

首先,这不是重复为什么我们在 C++ 中有 reinterpret_cast 当两个链式 static_cast 可以完成它的工作?.

我知道我们甚至不能使用两个链式static_cast来实现这一点的情况,是什么reinterpret_cast。但是在任何情况下,我应该更喜欢两个链接static_cast而不是简单且更具可读性reinterpret_cast吗?

0 投票
2 回答
555 浏览

c++ - 我可以举一个真实的例子,通过 void* 进行投射而 reinterpret_cast 不起作用?

有一组关于交叉转换(从转换T1*到不相关T2*)的问题,例如thisthis。答案通常是这样的:reinterpret_cast是实现定义的,并且转换到void*后面static_cast是明确定义的。然而,我还没有看到任何真实的例子说明reinterpret_cast使用时会出现什么问题。

有哪些现实生活中的例子可以通过void*有效而reinterpret_cast无效?

0 投票
1 回答
1171 浏览

c# - C++ 到 C#,static_cast 到枚举

我正在尝试将一些 VC 6.0 C++ 代码转换为 C#。具体来说,我正在解析一个二进制 dat 文件,但在转换这段代码时遇到了问题:

这是一些相关的代码。

我在这里阅读了这个线程Cast int to Enum in C#,但我的代码没有给我与旧程序相同的结果。

这是我在 C# 中的一些代码:

我确实有字节序问题,所以我正在反转字节序。

所以后来我想也许字节顺序问题仍然让我失望,所以这是另一种尝试:

我希望我已经提供了足够的细节来说明我正在尝试做的事情。

编辑:

这就是我解决问题的方法,显然我需要的值存储在二进制文件中 4 字节段的第一个字节中。这是一个循环。

0 投票
1 回答
1566 浏览

c++ - 根据情况在 if 语句中声明不同的数据类型:如何关闭编译器?

嘿,所以我正在制作一个序列化函数,它接受一个基类指针'Joint',提取它'type'的联合后代,然后想要根据指针真正指向的任何类型的“联合”实例化正确类型的“定义” .

  • 但是,即使我 static_cast 指向正确类型的指针,我仍然收到关于不包含后代类所具有的函数的基类关节的错误。我如何让编译器意识到指针也被转换为具有该功能的新类型?

  • 我也收到关于“typedef”的错误,这可能会根据关节*的“类型”而有所不同,编译时说它是未定义的。我如何告诉编译器无论如何,其中一个 if 语句都是正确的?(Jointdef 在 if 语句中声明)

这是来源:

0 投票
3 回答
1563 浏览

c++ - Union 与 static_cast(void*)

我正在编写代码,直到现在我都在使用这样的结构:

我需要一些通用结构来存储来自不同类的数据,并且我想在 std::vector 中使用它,所以这就是我不能使用模板的原因。什么是更好的选择:联合或 void 指针?

Void 指针只分配我需要的空间,但由于某种原因,c++ 是强类型语言,并且在我需要使用这些数据的任何地方进行强制转换不是 c++ 代码的设计方式。正如我所读到的,除非别无选择,否则不应使用 void 指针。

该替代方案可能是工会。它们与 c++ 一起提供,并且为每个成员使用相同的内存空间,非常类似于 void 指针。然而,它们是有代价的——分配的空间是联合中最大元素的大小,在我的情况下,大小之间的差异很大。

这是一个相当风格和“正确使用语言”的问题,因为这两种方式都可以完成我需要做的事情,但我无法确定精美的 c++ 代码是否可以弥补浪费的内存(尽管这些天的内存并不大忧虑)。