- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我使用了一个将 enum* 转换为 int* 的代码。像这样的:
enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);
编译代码(g++ 4.1.2)时,我收到以下警告消息:
dereferencing type-punned pointer will break strict-aliasing rules
我用谷歌搜索了这条消息,发现只有在严格的别名优化开启时才会发生这种情况。我有以下问题:
是的,我确实需要这种别名。
最佳答案
按顺序:
是的。 GCC 将假定指针不能别名。例如,如果您通过一个分配然后从另一个读取,作为优化,GCC 可能会重新排序读取和写入 - 我在生产代码中看到过这种情况,调试起来并不愉快。
几个。您可以使用 union 来表示您需要重新解释的内存。您可以使用 reinterpret_cast
。您可以在重新解释内存的位置通过 char *
进行转换 - char *
被定义为能够为任何内容设置别名。您可以使用具有 __attribute__((__may_alias__))
的类型。您可以使用 -fno-strict-aliasing 全局关闭别名假设。
__attribute__((__may_alias__))
使用的类型可能是最接近禁用特定代码部分的假设的方法。
对于您的特定示例,请注意枚举的大小定义不明确; GCC 通常使用可用于表示它的最小整数大小,因此将指向枚举的指针重新解释为整数可能会在结果整数中留下未初始化的数据字节。不要那样做。为什么不直接转换为适当大的整数类型?
关于c++ - "dereferencing type-punned pointer will break strict-aliasing rules"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4163126/
以下从 JPA 查询中获取 Spring 数据投影的方法对我不起作用: https://stackoverflow.com/a/45443776/1005607 我的 table : 查找_T id
tl;dr - 我想覆盖 OhMyZsh具有多行别名/函数的 Git 别名。 我正在尝试从 bash 切换到 zsh 并迁移我的别名。我可以通过这个(示例)覆盖 OhMyZsh 的 Git 别名: a
根据 this关于 C++11/14 严格别名规则的 stackoverflow 回答: If a program attempts to access the stored value of an
这个问题已经有答案了: How do I clone a list so that it doesn't change unexpectedly after assignment? (24 个回答)
这个问题在这里已经有了答案: Can I alias a subcommand? (shortening the output of `docker ps`) (4 个答案) 关闭 7 年前。 我知
我什至不知道它是否被称为别名,但无论如何让我继续。 您知道 C# 中的 System.String 类型是如何与“字符串”“别名”的吗?在 Visual Studio 中,“string”是小写的蓝色
练习测试问题: Consider the following code: String entree = new String (“chicken”); String side = “salad”;
我在优秀的 F# for Fun and Profit 中读到,我可以使用单案例区分联合来获得类型安全等。所以我试着这样做。但是我很快发现我无法调用被 DU(有点)别名或查看的类型的方法。 这是一个例
为什么会出现 Error in query (1064): Syntax error near 'as q2)' at line 7 与 SELECT SQL_NO_CACHE q1.d1, q1.a
我对在函数参数中使用别名有疑问。这是我的问题。 让我们考虑一下这个函数定义 void thisIsSparta(int& number){ ... } 在调用时,它与以下代码配合得很好: in
我将如何完成以下任务? >>> x={'NON_EPISODIC_MOVIE': 11} >>> for k,v in x.items(): ... k=v ... >>> NON_EPISO
' Strict aliasing ' 优化需要特别注意源代码,s.a.使用 union 而不是指针转换。有没有一种方法可以使用预处理器指令 (#if/else) 来检测编译器是否正在尝试进行此类优化
这个问题在这里已经有了答案: What is the strict aliasing rule? (11 个答案) 关闭 8 年前。 我真的很困惑。 uint8_t hash[20]; uint32
什么是“别名流缓冲区”?我在 answer 的评论中遇到了这个词我的。 最佳答案 我以前从没听过这个词,但在你引用的话题中,使用它的人还举了一个例子:两条流使用相同的 streambuf。 当然,只是
这是我的场景: public IEnumerable getSuperMercTree(string IDLanguage) { SuperMercModel SMer = null;
例如,此声明带有 deriving : {-# LANGUAGE DeriveDataTypeable, ConstraintKinds #-} import Data.Data (Data) imp
我患有the problem described here的变体: ActiveRecord assigns table aliases for association joins fairly un
我使用了 highcharts 库中的基本折线图,但我认为线条不够平滑。 有可能改进吗? 我的代码: chart: { type:'line',
创建 JavaFX 场景时,我传入 SceneAntialiasing.BALANCED 作为参数,但在我的笔记本电脑上它给了我这个警告: WARNING: System can't support
我试图用 renderEncoder 的 drawIndexedPrimitives 画一个半圆 [renderEncoder setVertexBuffer:self.vertexBuffer of
我是一名优秀的程序员,十分优秀!