问题标签 [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.
c++ - 为什么要通过 static_cast 将数字转换为 double 的麻烦?
在我正在处理的代码中遇到了这个问题:
(something
s 是double
s。)
我怀疑有一个很好的理由去经历做事的麻烦
static_cast<double>(1)
等等,但似乎我可以少打很多字。
我不明白什么?
提前致谢。
casting - 来自...的无效转换 Objective-C++
我刚刚告诉 Xcode 将所有内容编译为 Objective-C++,现在我在转换时遇到了错误。
当我尝试使用static_cast<CFDictionaryRef>(aInPropertyValue)
时,我什么也得不到。好像(这可能是真的)我没有正确使用它。
c++ - 如何在 CRTP 中实现向下转换是否有效的编译时检查?
我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):
像往常一样打算这样使用:
现在这static_cast
让我很困扰。我需要一个向下转换(不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。
但是,如果我以某种方式改变了层次结构并且演员现在变得无效怎么办?
在这种情况下,我可以以某种方式强制执行显式向下转换是否有效的编译时检查吗?
c++ - 钻石层次结构中的低落
为什么static_cast
不能从虚拟基地垂头丧气?
g++ 4.5 说:
解决方案是使用dynamic_cast
? 但为什么。什么是理性?
-- 编辑 --
下面很好的答案。没有答案详细说明子对象和 vtables 最终是如何被订购的。以下文章为 gcc 提供了一些很好的示例:
http ://www.phpcompiler.org/articles/virtualinheritance.html#Downcasting
c++ - C++ static_cast 运行时开销
请参阅下面的代码。
a)在这种情况下(简单继承,没有虚拟成员), B::df() 中的静态转换是否有任何开销(无论如何)?我发现类似问题的一些相互矛盾的答案,这就是我问的原因......
b)我正在考虑const M1 * func
在 A 中设置私有并在 B 中引入一个新的私有字段const M2 * func
以避免强制转换,但这会使事情复杂化并使智能指针的使用更加困难。你有没有更好的方法来避免演员阵容?
c++ - C++ 我们什么时候应该更喜欢使用两个链接的 static_cast 而不是 reinterpret_cast
首先,这不是重复为什么我们在 C++ 中有 reinterpret_cast 当两个链式 static_cast 可以完成它的工作?.
我知道我们甚至不能使用两个链式static_cast
来实现这一点的情况,是什么reinterpret_cast
。但是在任何情况下,我应该更喜欢两个链接static_cast
而不是简单且更具可读性reinterpret_cast
吗?
c# - C++ 到 C#,static_cast 到枚举
我正在尝试将一些 VC 6.0 C++ 代码转换为 C#。具体来说,我正在解析一个二进制 dat 文件,但在转换这段代码时遇到了问题:
这是一些相关的代码。
我在这里阅读了这个线程Cast int to Enum in C#,但我的代码没有给我与旧程序相同的结果。
这是我在 C# 中的一些代码:
我确实有字节序问题,所以我正在反转字节序。
所以后来我想也许字节顺序问题仍然让我失望,所以这是另一种尝试:
我希望我已经提供了足够的细节来说明我正在尝试做的事情。
编辑:
这就是我解决问题的方法,显然我需要的值存储在二进制文件中 4 字节段的第一个字节中。这是一个循环。
c++ - 根据情况在 if 语句中声明不同的数据类型:如何关闭编译器?
嘿,所以我正在制作一个序列化函数,它接受一个基类指针'Joint'
,提取它'type'
的联合后代,然后想要根据指针真正指向的任何类型的“联合”实例化正确类型的“定义” .
但是,即使我 static_cast 指向正确类型的指针,我仍然收到关于不包含后代类所具有的函数的基类关节的错误。我如何让编译器意识到指针也被转换为具有该功能的新类型?
我也收到关于“typedef”的错误,这可能会根据关节*的“类型”而有所不同,编译时说它是未定义的。我如何告诉编译器无论如何,其中一个 if 语句都是正确的?(Jointdef 在 if 语句中声明)
这是来源:
c++ - Union 与 static_cast(void*)
我正在编写代码,直到现在我都在使用这样的结构:
我需要一些通用结构来存储来自不同类的数据,并且我想在 std::vector 中使用它,所以这就是我不能使用模板的原因。什么是更好的选择:联合或 void 指针?
Void 指针只分配我需要的空间,但由于某种原因,c++ 是强类型语言,并且在我需要使用这些数据的任何地方进行强制转换不是 c++ 代码的设计方式。正如我所读到的,除非别无选择,否则不应使用 void 指针。
该替代方案可能是工会。它们与 c++ 一起提供,并且为每个成员使用相同的内存空间,非常类似于 void 指针。然而,它们是有代价的——分配的空间是联合中最大元素的大小,在我的情况下,大小之间的差异很大。
这是一个相当风格和“正确使用语言”的问题,因为这两种方式都可以完成我需要做的事情,但我无法确定精美的 c++ 代码是否可以弥补浪费的内存(尽管这些天的内存并不大忧虑)。