问题标签 [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++ - 从基类到派生类的静态转换
我有一些不清楚的地方希望引起您的注意,请检查这些代码片段:
我故意删除了所有不必要的代码,请查看将“this”指针静态转换为“city”类型的构造函数,其定义如下:
该课程是故意为空的,因为我认为它可以包含的内容与此处无关。希望我无法 100% 理解这里发生的事情,g++ 4.7.2 在编译阶段不会打印警告或错误,每当我使用“this_city”指针时,我都可以访问城市的所有公共成员,对象本身看起来是一致的,因为所有变量都已正确初始化并始终包含有效数据。
我想知道的是,如果我将 construction_management 定义为普通的非模板类,为什么这段代码不起作用?由于临时从 const 到指向 city 的非 const 指针的转换,强制转换失败,为什么?
这是错误打印:
如果 construction_management 是一个模板,为什么还要工作?这是一种 CRTP 吗?
谢谢你们。
c++ - 具有相同参数类型但具有不同常量限定符的 std::vector 的强制转换
问题很简单,一般来说,静态演员表(或其他演员表)是否安全
至
二进制,我不明白为什么原生类型会有所不同,毕竟,这const
是一种不应该影响元素大小的语言约束,或者我认为
我可不可以做
不担心这会沉别人的船吗?还是一般来说这是不安全的?
c++ - 可以使用 static_cast 避免 vtable 开销吗?
这是我的问题。我有一个基类和一个派生类,它覆盖了基类中的一些方法。为简单起见,请考虑以下示例:
在我的实际程序中,这些类作为参数传递给其他类并在其他方法中调用,但为了简单起见,让我们创建一个简单的函数,将基类或派生类作为参数。我可以简单地写
由于虚函数,对适当函数的调用将在运行时解决。
但是,我担心,如果call_fn
要调用 , 百万次(在我的情况下,它会因为我的实际应用程序是一个模拟实验),我会得到一个我想避免的显着开销。
所以,我想知道使用 static_cast 是否真的可以解决这个问题。也许是这样的:
在这种情况下,函数调用将作为call_fn<base>(obj)
调用基方法或call_fn<derived>(obj)
调用派生方法来完成。
这个解决方案会避免 vtable 开销还是会受到影响?提前感谢您的任何回复!
顺便说一句,我知道 CRTP,但不是很熟悉。这就是为什么我想先知道这个简单问题的答案:)
c++ - static_cast<> 中的 C++ 编译错误
下面是我的代码
我在执行 static_cast 时遇到编译错误。我正在尝试将“someValue”数组中的值分配给“A**& somenum”。你能帮忙怎么做吗?
非常感谢您提前。
c++ - Pthread 和 void* 尝试取消引用泛型指针
当我调试我的 PRJ 时,我收到此错误:
args 错误:报告了多个错误。\ 无法执行 MI 命令:-var-create -
args 来自调试器后端的错误消息:尝试取消引用通用指针。\ 无法创建变量对象
从 void* args 转换为 Mapper* arg 时出现错误。
更新 1
KMaster、KMapper 分别实现了 Master、Mapper 但它们并没有添加任何相关的内容。有效的是调用方法的 KMapper work()
。这是代码:
希望有人能帮忙!
更新 2
调试器截图:
c++ - 使用 static_cast 的类型转换无效,我应该使用什么正确的转换?
我有一个类型定义,typedef vector<Object*> ObjList;
我也有一个函数vector<BigObject*>* ObjectBox::getBigObjectList();
。BigObject
继承自Object
我想要做的是获取一个vector<BigObject*>*
fromgetBigObjectList()
并将其转换为vector<Object*>*
,这是一个向上转换,并且这种类型被定义为ObjList
所以我基本上想将它转换为一个ObjList
类型
我尝试了两种方法,第一种是
这个编译,我从这篇文章中读到(When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?),它说 C 风格的转换很少需要,因为它可以被开发成reinterpret-cast
然后我尝试使用static_cast
,但我得到一个错误说无效类型转换
这也行不通
为什么这不起作用?这是因为static_cast
只能用于转换直接类(如其Object
自身)而不是嵌套类(我只是在这里完全猜测)?在这种情况下我该怎么办?
c++ - 从 double 到 const int 的 C++ 类型转换无法正常工作
我有一个 const int 类型的变量,但它所依赖的参数是 double 类型。当我尝试将其从“double”转换为“const int”时,它无法正常工作。比如N应该是991,就输入990。我试过几种方法,只有一种有效,但我不确定这种方法是否一直有效。以下是我尝试过的一些方法:
第一种方法:
第二种方法:
第三种方法:
第四种方法(唯一工作方法):
请注意,dx 是一个值,使得 (Ls-1)/dx 的余数始终为零(即,它始终是整数值)。无论如何可以解释为什么其他方法不起作用,以便我可以更好地理解类型转换?
编辑:根据要求,我正在上传整个代码以显示一切是如何工作的:
c++ - 使用 dynamic_cast 进行运行时类型识别
在阅读 Essential c++ 第 5.10 章运行时类型识别时,我遇到了一个问题。我先介绍一下背景。有一个名为的基类num_sequence
和一个Fibonacci
派生自的类num_sequence
。在基类中,有一个名为的虚函数gen_elems
,派生类有自己的定义。
以下内容来自书中。
我们知道 gen_elems() 的斐波那契实例将被调用。然而,虽然我们从这个测试中知道 ps 寻址一个斐波那契类对象,但尝试直接通过 ps 调用 gen_elems() 的斐波那契实例会导致编译时错误:
ps->斐波那契::gen_elems(64); //给出编译时错误
ps 不知道它所寻址的对象的类型,即使我们和 typeid 和虚函数机制知道。
要调用 gen_elems() 的斐波那契实例,我们必须指示编译器将其转换
ps
为斐波那契类型的指针。static_cast 和 dynamic_cast 都可以完成这项工作。
我被粗体字弄糊涂了。ps->gen_elems(64)
实际上调用 的 Fibonacci 实例gen_elems()
。为什么我们需要使用 static_cast 和 dynamic_cast 将其转换为斐波那契类型的指针?
c++ - 不能将静态类转换为整数
为什么当我尝试将 element* 静态转换为 int 时出现错误
c++ - 我应该使用 static_cast 还是 INT64_C 可移植地分配 64 位常量?
将 64 位常量分配为
不可移植,因为long long
不一定int64_t
. 这篇文章哪个初始化程序适合 int64_t?讨论了INT64_C()
宏 from的使用<stdint.h>
,但是否也可以使用static_cast
as
?
我应该更喜欢哪一个,为什么,或者它们都运作良好?
我在互联网和 SO 上进行了搜索,但没有找到任何static_cast
探索该选项的地方。我还进行了测试,sizeof()
以确认它在简单的情况下有效。