问题标签 [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 投票
1 回答
2037 浏览

c++ - 从基类到派生类的静态转换

我有一些不清楚的地方希望引起您的注意,请检查这些代码片段:

我故意删除了所有不必要的代码,请查看将“this”指针静态转换为“city”类型的构造函数,其定义如下:

该课程是故意为空的,因为我认为它可以包含的内容与此处无关。希望我无法 100% 理解这里发生的事情,g++ 4.7.2 在编译阶段不会打印警告或错误,每当我使用“this_city”指针时,我都可以访问城市的所有公共成员,对象本身看起来是一致的,因为所有变量都已正确初始化并始终包含有效数据。

我想知道的是,如果我将 construction_management 定义为普通的非模板类,为什么这段代码不起作用?由于临时从 const 到指向 city 的非 const 指针的转换,强制转换失败,为什么?

这是错误打印:

如果 construction_management 是一个模板,为什么还要工作?这是一种 CRTP 吗?

谢谢你们。

0 投票
1 回答
242 浏览

c++ - 具有相同参数类型但具有不同常量限定符的 std::vector 的强制转换

问题很简单,一般来说,静态演员表(或其他演员表)是否安全

二进制,我不明白为什么原生类型会有所不同,毕竟,这const是一种不应该影响元素大小的语言约束,或者我认为

我可不可以做

不担心这会沉别人的船吗?还是一般来说这是不安全的?

0 投票
4 回答
1794 浏览

c++ - 可以使用 static_cast 避免 vtable 开销吗?

这是我的问题。我有一个基类和一个派生类,它覆盖了基类中的一些方法。为简单起见,请考虑以下示例:

在我的实际程序中,这些类作为参数传递给其他类并在其他方法中调用,但为了简单起见,让我们创建一个简单的函数,将基类或派生类作为参数。我可以简单地写

由于虚函数,对适当函数的调用将在运行时解决。

但是,我担心,如果call_fn要调用 , 百万次(在我的情况下,它会因为我的实际应用程序是一个模拟实验),我会得到一个我想避免的显着开销。

所以,我想知道使用 static_cast 是否真的可以解决这个问题。也许是这样的:

在这种情况下,函数调用将作为call_fn<base>(obj)调用基方法或call_fn<derived>(obj)调用派生方法来完成。

这个解决方案会避免 vtable 开销还是会受到影响?提前感谢您的任何回复!

顺便说一句,我知道 CRTP,但不是很熟悉。这就是为什么我想先知道这个简单问题的答案:)

0 投票
3 回答
2291 浏览

c++ - static_cast<> 中的 C++ 编译错误

下面是我的代码

我在执行 static_cast 时遇到编译错误。我正在尝试将“someValue”数组中的值分配给“A**& somenum”。你能帮忙怎么做吗?

非常感谢您提前。

0 投票
1 回答
538 浏览

c++ - Pthread 和 void* 尝试取消引用泛型指针

当我调试我的 PRJ 时,我收到此错误:

args 错误:报告了多个错误。\ 无法执行 MI 命令:-var-create -

args 来自调试器后端的错误消息:尝试取消引用通用指针。\ 无法创建变量对象

从 void* args 转换为 Mapper* arg 时出现错误。

更新 1

KMaster、KMapper 分别实现了 Master、Mapper 但它们并没有添加任何相关的内容。有效的是调用方法的 KMapper work()。这是代码:

希望有人能帮忙!

更新 2

调试器截图:

日食调试

0 投票
3 回答
24027 浏览

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自身)而不是嵌套类(我只是在这里完全猜测)?在这种情况下我该怎么办?

0 投票
1 回答
1352 浏览

c++ - 从 double 到 const int 的 C++ 类型转换无法正常工作

我有一个 const int 类型的变量,但它所依赖的参数是 double 类型。当我尝试将其从“double”转换为“const int”时,它无法正常工作。比如N应该是991,就输入990。我试过几种方法,只有一种有效,但我不确定这种方法是否一直有效。以下是我尝试过的一些方法:

第一种方法:

第二种方法:

第三种方法:

第四种方法(唯一工作方法):

请注意,dx 是一个值,使得 (Ls-1)/dx 的余数始终为零(即,它始终是整数值)。无论如何可以解释为什么其他方法不起作用,以便我可以更好地理解类型转换?

编辑:根据要求,我正在上传整个代码以显示一切是如何工作的:

0 投票
1 回答
599 浏览

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 将其转换为斐波那契类型的指针?

0 投票
2 回答
166 浏览

c++ - 不能将静态类转换为整数

为什么当我尝试将 element* 静态转换为 int 时出现错误

0 投票
1 回答
2474 浏览

c++ - 我应该使用 static_cast 还是 INT64_C 可移植地分配 64 位常量?

将 64 位常量分配为

不可移植,因为long long 不一定int64_t. 这篇文章哪个初始化程序适合 int64_t?讨论了INT64_C()宏 from的使用<stdint.h>,但是否也可以使用static_castas

?

我应该更喜欢哪一个,为什么,或者它们都运作良好?

我在互联网和 SO 上进行了搜索,但没有找到任何static_cast探索该选项的地方。我还进行了测试,sizeof()以确认它在简单的情况下有效。