- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它为什么会存在?在什么情况下它不会导致严格的别名违规,在哪些情况下会导致?
我的意思是,如果你在两个不兼容的类型之间进行转换,并且该转换的结果是唯一指向它在整个程序中使用的内存的指针,那么在假设没有其他别名引用的情况下使用它是否安全那个内存?然后将其转换回其原始类型并假设存储它的变量是程序上该内存位置的唯一别名,是否安全?这就是我要问的。
我当然是指阅读和写作。
最佳答案
Does reinterpret_cast cause a strict aliasing violation?
不是单独的,不。但它的滥用可能会导致这种违规行为。
除非你知道你需要它(很少见),知道没有令人满意的替代品(很少见),并且知道它不会导致未定义的行为,否则使用重新解释转换不是一个好主意。
why does it even exist?
顾名思义,允许重新解释类型。这些用例在 C++ 中很少见,不适合初学者和中级程序员。
高级程序员可能会遇到它有用的一些情况:
In what situations does it not cause a strict aliasing violation, and in which ones does it do cause one?
类型转换本身不会造成任何违规。
仅当您转换为另一种类型的指针(或引用),然后间接通过该指针访问对象时,才会发生严格的别名违规。因此,如果您不重新解释转换指针(或引用),或者您不访问指向的对象,那么您就没有为对象的类型设置别名,因此不能违反严格的别名规则。
所以,有趣的是使用另一种(别名)类型访问对象是否定义良好。这是来自 cppreference 的列表:
此列表中缺少:
if you cast between two incompatible types, (...), is it safe to use it
取决于您所说的“使用”。如果您的意思是通过重新解释的指针间接并通过“不兼容”类型访问对象,那么一般来说这不安全。
and the result of that cast is the only pointer that points to the memory it uses in the whole program
这无关紧要。在大多数情况下,编译器几乎不可能证明这是真的。
Is it safe then to cast it back to its original type and also use it assuming the variable where it is stored
假设转换到其他类型的格式一开始就很好,那么转换回原始类型总是安全的。
关于c++ - reinterpret_cast 会导致严格的别名冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62923260/
最近我遇到了 AngularJS Strict DI 模式。使用它的目的和好处是什么?通过在移动设备上使用它,我们会获得显着的性能提升吗? 我尝试将它应用到我的代码中,并且在编写代码时我没有做任何注释
要在复制文本的底部添加额外信息 - 我想使用以下 JS: document.addEventListener('copy', (event) => { const pagelin
Java 是否有一个好的、严格 的日期解析器?我可以访问 Joda-Time,但我还没有看到这个选项。我发现了“Is there a good date parser for Java”这个问题,虽然
在下面的网页中,图像和 div 之间有几个像素的间隙。 (我已经在 Firefox 3 和 Safari 4 中测试过。) 我怎样才能缩小差距? body { background-color:
前段时间我遇到了一个“问题”,但我一直没有弄清楚。希望有人能照亮它。当我将 DOCTYPE 从严格更改为过渡时,是什么导致某些浏览器(Chrome、Opera 和 Safari)以不同方式呈现页面。我
PHP 以其类型杂耍而闻名。我必须承认这让我很困惑,而且我很难在比较中找出基本的逻辑/基本内容。 例如:如果 $a > $b 为真且 $b > $c 为真,是否意味着 $a > $c总是也是真的吗?
有在ECMAScript Language Specification11.9.1 等于运算符 (==): NOTE 3 The equality operator is not always tra
考虑这些不同的尝试,比如 last : Prelude> import Data.Foldable Prelude Data.Foldable> foldr const undefined (reve
我正在考虑使用 jQuery 元数据插件。看起来很有趣,但是... ... alert($('li.someclass').metadata().some); 这段代码有效吗? 更新 当然这是一个老例
我有一个 CSS 文件,我的本地开发服务器(webpack)正在提供一个显然错误的 mime 类型。 Refused to apply style from 'http://localhost:100
因此对于 Google Chrome 和 Opera,cookie 具有 SameSite 属性,该属性可以具有以下两个值之一:strict 或 lax。 它们之间的一些区别之一是 SameSite=
我试图到处寻找这个问题的答案,但似乎我运气不好。 我有一个非常简单的 Mongoose 模型 var userObject = { profile: { username: {
我正在为必须使用 XHTML 1.0 Strict 进行验证的类编写程序。根据 w3 的验证程序,我的页面通过了验证。我还有一个 HTML5 版本(这是原始版本),它可以按应有的方式进行验证和工作。
我得到了很多 validation errors因为 在 里面。如果我删除 br 标签,那么它工作正常。 为什么会产生问题? 最佳答案 不是br在p里面,而是你没有结束 br与 /特点。你有 在代码中
好吧,这让我抓狂。 我想在我的文档周围加上边框。它应该很好地绕过整个窗口/视口(viewport)。所以我定义: body { border: 1px solid red; } 当我的文档处于 q
我在 MySql 服务器上运行的查询遇到问题。这是查询: SELECT itms.Gender,itms.Age, (CASE WHEN (plv.Discount = 0 OR t1.EverGre
我有以下 javascript 函数,如果所有必填字段都不完整并且是我使用 Google Apps 脚本创建的表单的一部分,它会阻止表单提交。请注意,#submitbutton 实际上是一个常规按钮,
我是一名优秀的程序员,十分优秀!