问题标签 [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++ - C++ 无法通过虚拟基 A 从基 A 转换为派生类型 B
我有三个班级:
尝试从 A* 到 B* 的静态转换我收到以下错误:
c++ - 将 Derived*const 转换为 Base*const
编辑 - 将问题更多地放在上下文中。
鉴于:
当我尝试实施
这没用。aconst_cast
对我来说没有意义,因为我不想改变常量,而且我没有改变我所指的内容,那么为什么 g++ 会告诉我
? 如果我省略演员表,它会说
如果有人能对此有所了解,将不胜感激。
c++ - C++ sdi 应用程序中的 Static_cast 编译器错误
我有一个小型 SDI 应用程序,我正在尝试添加对菜单使用情况的跟踪,即。用户选择某些菜单项的次数。
一些菜单项由 View 组件 (DemoView.cpp) 处理,而其他菜单项由主应用程序 (DemoApp.cpp) 处理。Since the tracking structure is defined in the main app, I believe that I have to notify the View's parent with a special message when a menu item (handled by the View) is selected.
如果这是正确的,我的问题是我无法创建正确的 ON_MESSAGE 命令。它看起来像这样:
其中 OnIncreaseFreq() 定义如下:
但是我收到此错误:
我将不胜感激
c++ - qobject_cast 是如何工作的?
我刚刚在 Qt 中找到了以下代码,我有点困惑这里发生了什么。
尤其是做什么reinterpret_cast<T>(0)
?
有人愿意解释吗?
c++ - 在 C++ 中转换类型时出错
我有一个程序需要使用 Format(); 将字符串文字和 int 组合成 CString 变量的函数。我尝试了几种不同的方法,它们的代码在这里:
第一个返回错误 C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [33]' to 'const wchar_t *'
第二个,没有错误,但文本显示为汉字。
第三个返回错误 C2440: 'static_cast' : cannot convert from 'const char [33]' to 'wchar_t'
将 CStrings 转换为 wchar_t *s 的任何想法?
谢谢
c++ - 关于类型转换的初学者问题
我打算在我的随机数生成器中对我的数字使用 math.h。看来我只能在双打上使用 math.h 函数。所以:
我试图给“value”一个“currentValue”的值,或者至少是要转移的数字值的一部分。我正在使用随机数生成器,所以我不在乎是否转移了整个数字。我只需要它的一部分工作。
我在某个时候:
** 通过代码未显示它们的值被设置。**
后来,我需要一部分价值去currentValue。
我试过了:
任何帮助,将不胜感激。
谢谢您的帮助。问题已经解决了。
c++ - static_cast 被滥用了吗?
我对 的感觉很复杂static_cast
,因为它是可用的最安全的 C++ 转换,但同时允许安全和不安全的转换,所以你必须知道上下文来说明它是否真的安全或可能导致 UB(例如,在转换时到一个子类)。
那么为什么没有更安全的显式转换呢?这是一个示例,它可能有用。在 COM 中,它们必须将接口指针返回为void** ppv
,因此“必须”显式转换
然后建议将其替换为更安全的 C++ 演员表
static_cast
但是,即使在这里也有意义吗?this
是一个派生自 的类IInterface
,因此可以简单地写
或使用像
那么,static_cast
有时会被误用并且可以(应该?)在某些情况下被这个取代implicit_cast
,还是我错过了什么?
编辑:我知道在 COM 中需要强制转换,但不一定是static_cast
,隐式强制转换就足够了。
c++ - 当两个链接的 static_cast 可以完成它的工作时,为什么我们在 C++ 中有 reinterpret_cast?
假设我想投到A*
,char*
反之亦然,我们有两个选择(我的意思是,我们中的许多人认为我们有两个选择,因为两者似乎都有效!因此混乱!):
两者都工作正常。
即使这样也能正常工作!
那么为什么我们reinterpret_cast
在 C++ 中有两个链式 static_cast
可以完成它的工作呢?
你们中的一些人可能会认为这个主题与之前的主题重复,例如本文底部列出的主题,但事实并非如此。这些主题仅在理论上进行讨论,但没有一个给出一个例子来说明为什么reintepret_cast
真的需要,而且两个 static_cast
肯定会失败。我同意,一个 static_cast 会失败。但是两个呢?
如果两个链式的语法static_cast
看起来很繁琐,那么我们可以编写一个函数模板,使其对程序员更友好:
然后我们可以使用它,如:
另外,请参阅这种any_cast
可能有用的情况:Proper cast for fstream read and write member functions。
所以我的问题基本上是,
- 为什么我们有
reinterpret_cast
C++? - 请给我看一个例子,两个链式
static_cast
肯定不能做同样的工作?
c++ - reinterpret_cast 用于几乎 pod 数据(布局兼容性是否足够)
我正在尝试了解static_cast
和reinterpret_cast
。
如果我是正确的,标准(9.2.18)说reinterpret_cast
对于 pod 数据是安全的:
一个指向 POD 结构对象的指针,使用 a 进行适当转换
reinterpret_cast
,指向它的初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然。[注意:因此,在 POD 结构对象中可能存在未命名的填充,但不是在其开头,这是实现适当对齐所必需的。——尾注]
我的问题是如何严格解释这一点。例如,布局兼容性是否足够?如果没有,为什么不呢?
对我来说,以下示例显示了一个示例,其中严格的“仅 POD 有效”解释似乎是错误的。
complex_base::m_data
此外,如果受到保护(这意味着complex_base
不是 pod),可能会破坏什么?[编辑:以及如何保护自己/检测此类破损]
在我看来,布局兼容性应该足够了——但这似乎不是标准所说的。
编辑:感谢您的回答。他们还帮我找到了这个, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
c++ - 模板化赋值运算符问题
我想确保 *this != &rhs 在赋值运算符中。但它不会编译。有什么建议么?