问题标签 [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 回答
860 浏览

c++ - C++ 防御性编程:从具有类型安全性的缓冲区中读取

假设我有一个我不拥有的类:DataBuffer。它提供了各种get成员函数:

从包含在此缓冲区中的结构中读取时,我知道字段的顺序和大小,并且我想减少未来代码更改导致错误的机会:

然后有人在写入之前检查更改以对标头执行某些操作:

以下是一种可以接受的方式来强化代码以防止更改?请记住,我不能将函数名称更改为 getByte、getUShort 等。我可以从 DataBuffer 继承,但这似乎有点过头了。

更新了不安全的遗留代码示例:

0 投票
5 回答
3360 浏览

c++ - 将无符号解释为有符号

我正在使用嵌入式平台(ARM),在处理位模式时必须小心。让我们假设这条线超出了我的影响:

解释为未签名这将是 206。但实际上它已签名,因此类似于-50。我怎样才能继续使用这个值作为签名?

也没有(导致所有输入值都为 0x10 或 0x00)

我只是希望这些位保持不变,即。(bar == 0xCE)

反之亦然,我很感兴趣如何在不弄乱位模式的情况下将表示负数的位模式转换为无符号变量。我正在使用 GCC。

0 投票
6 回答
20019 浏览

c++ - 为什么涉及虚拟继承时不能使用static_cast进行向下转换?

考虑以下代码:

这是标准 ( [n3290: 5.2.9/2]) 所禁止的,因此代码无法编译,因为Derived 实际上继承自Base. virtual从继承中删除使代码有效。

这条规则存在的技术原因是什么?

0 投票
6 回答
9513 浏览

c++ - 当您使用多重继承时,静态转换何时安全?

我发现自己处于一种我知道某物是什么类型的情况下。类型是三个(或更多)继承级别之一。我调用返回的工厂,B*但是 T 是类型的最高级别(如果我的代码知道它是什么)或第二级别。

无论如何,我static_cast在模板中做了一个错误的事情。我的问题是我什么时候可以安全地进行静态投射?有没有这样的时候?我在这种情况下这样做是因为当我不小心将 T 作为古怪的东西(已经发生并且)动态转换忽略(并返回 null)时,我宁愿得到编译错误。但是,当我知道正确的类型时,指针没有调整,导致我的指针不好。我不确定为什么在这种情况下完全允许静态转换。

我什么时候可以安全地使用 static_cast 进行向下投射?有没有什么情况?现在似乎使用 a 总是错误的static_cast(当目的是向下转换时)

好的,我想出了如何重现它。

0 投票
1 回答
1356 浏览

c++ - 将类对象指针打包成 char * 用于消息队列

是否可以通过 POSIX 消息队列正确安全地传递类对象指针?

例如,

并在接收方,执行reinterpret_cast回我的Object

由于消息队列在 Linux 上使用文件描述符,我很好奇它是如何工作的。我尝试过没有成功,但我认为我可能做错了什么。

0 投票
1 回答
990 浏览

c++ - '不相关类型'之间的static_cast

如果我有这个类结构:

为什么我可以表演这个演员表?

A和B不相关,不是吗?

0 投票
3 回答
227 浏览

c++ - C ++多态,不完全向下转换

我有一个数组,其中包含对平淡基本类型的引用,我们称之为Object

Class1来自ObjectClass2来自Class1.

我喜欢这样ToString()_Object *Class1 *

我的问题是,当对象实际上是Class2但不是特别向下转换时,这个输出会是 1 还是 2?virtual关键字是否具有预期效果?

0 投票
1 回答
87 浏览

c++ - 链式 static_cast 的定义如何?

(5.2.9/10) 类型“指向 cv1 void”的右值可以转换为类型“指向 cv2 T”的右值,其中 T 是对象类型,而 cv2 与 cv 限定相同或更大cv-qualification 比,cv1。指向对象的类型指针转换为“指向 cv void 的指针”并返回到原始指针类型的值将具有其原始值。

既然,转换 from 的结果void*int*(原始指针类型)那么,是什么使以下转换有效?

0 投票
3 回答
1423 浏览

c++ - static_cast 限制对公共成员函数的访问?

我在以下示例的 static_cast 中收到“错误:'A' 是 'B' 的不可访问基础”:

但是当使用 reinterpret_cast 或 C 风格的类型转换 ((Derived *)this)->funB() 时,它编译/运行良好。这种行为正确吗?

使用的编译器:gcc 版本 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)。

谢谢。

0 投票
1 回答
1277 浏览

c++ - 如何初始化模板类型变量?

哪一个更好?

编辑:T是原始类型。