- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我有一个结构
SomeStruct
{
double y;
double x;
};
然后我在某个地方初始化它
SomeStruct s{1,2}; //y=1 x=2
然后,如果我将结构重新排序为
,那么我的代码似乎可以无声地中断SomeStruct
{
double x;
double y;
double z;
};
因为现在 SomeStruct s{1,2}
意味着 x=1, y=2, z=0
编辑:提出的一个论点是构造函数也有同样的问题,这是事实,但您通常可以在那里看到参数名称和顺序 - 如果使用任何现代 IDE,甚至会更清楚。
我还没有看到有人提到过这一点,但似乎只有在确定永远不会更改数据布局的情况下才能安全地使用这样的聚合初始化。那将是罕见的情况,那么是否存在“永远不要对非同构结构使用聚合初始化”的潜规则?
最佳答案
Is aggregate initialization of struct safe during refactor?
取决于您在此上下文中如何定义“安全”。以及做了什么样的重构。
it seems that my code can silently break ... since now
SomeStruct s{1,2}
means thatx=1, y=2, z=0
这可能完全没问题。为什么不应该将 z 初始化为 0?在您知道它代表什么之前,您无法判断它是否损坏。
这是您可以对类进行的较为良性的更改之一。重新排序成员等不同的更改肯定会需要更改相关代码。
it seems that you can only safely use aggregate initialization like this if you are certain that you will never make changes to the layout of the data.
或者,如果预期唯一的变化是可以进行值初始化的新成员。 (C 支持指定的初始值设定项,它们甚至可以适应成员顺序的更改。不幸的是,我们在 C++ 中没有它们)。
或者,如果您不觉得查找和更新聚合初始化有问题。您应该知道,只要您对聚合进行更改,就存在这种可能性。
但事实上,构造函数确实提供了一种“实现防火墙”,将用户与成员的更改分离开来。新成员等一些更改可能会提示对构造函数进行更改,但缺少构造函数参数确实有助于破坏编译。
so is there an unspoken rule of "never use aggregate initialization on non homogeneous structs"?
当然,您和我都考虑过异常(exception)情况。此外,同质性和异质性没有区别。
我会反过来说,当设计一个public API 时,你应该考虑类的布局是应该一成不变,还是让成员私有(private)和提供一个构造函数。对于内部 API,如果您可以快速遍历该类的所有使用,则无关紧要。
GCC 有一个警告选项可以解决您描述的确切情况:-Wmissing-field-initializers
(由 -Wextra
启用)。如果您提供任何(但不是全部)成员初始值设定项,它将生成警告。
关于c++ - 重构期间结构的聚合初始化是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666183/
我正在学习 Spring 安全性,但我对它的灵活性感到困惑.. 我知道我可以通过在标签中定义规则来保护网址 然后我看到有一个@secure 注释可以保护方法。 然后还有其他注释来保护域(或 POJO)
假设有一个 key 加密 key 位于内存中并且未写入文件或数据库... byte[] kek = new byte[32]; secureRandom.nextBytes(kek); byte[]
我有 Spring Security 3.2.0 RC1 的问题 我正在使用标签来连接我 这表示“方法‘setF
我正在创建一个使用 Node Js 服务器 API 的 Flutter 应用程序。对于授权,我决定将 JWT 与私钥/公钥一起使用。服务器和移动客户端之间的通信使用 HTTPS。 Flutter 应用
在过去的几年里,我一直在使用范围从 Raphael.js 的 javascript 库。至 D3 ,我已经为自己的教育操纵了来自网络各地的动画。我已经从各种 git 存储库下载了 js 脚本,例如 s
在 python 中实现身份验证的好方法是什么?已经存在的东西也很好。我需要它通过不受信任的网络连接进行身份验证。它不需要太高级,只要足以安全地获取通用密码即可。我查看了 ssl 模块。但那个模块让我
我正在尝试学习“如何在 Hadoop 中实现 Kerberos?”我已经看过这个文档 https://issues.apache.org/jira/browse/HADOOP-4487我还了解了基本的
我有一个带有 apache2、php、mysql 的生产服务器。我现在只有一个站点 (mysite.com) 作为虚拟主机。我想把 phpmyadmin、webalizer 和 webmin 放在那里
前些天在网上看到防火墙软件OPNsense,对其有了兴趣,以前写过一个其前面的一个软件M0n0wall( 关于m0n0wa
我在 Spring Boot 和 oauth2(由 Google 提供)上编写了 rest 后端,在 "/login" 上自动重定向。除了 web 的 oauth 之外,我还想在移动后端进行 Fire
我想调用类 Foo,它的构造函数中有抽象类 Base。我希望能够从派生自 Base 的 Derived 调用 Foo 并使用 Derived覆盖方法而不是 Base 的方法。 我只能按照指示使用原始指
如何提高 session 的安全性? $this->session->userdata('userid') 我一直在为我的 ajax 调用扔掉这个小坏蛋。有些情况我没有。然后我想,使用 DOM 中的
我目前正在为某些人提供程序集编译服务。他们可以在在线编辑器中输入汇编代码并进行编译。然后编译它时,代码通过ajax请求发送到我的服务器,编译并返回程序的输出。 但是,我想知道我可以做些什么来防止对服务
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
目前,我通过将 session 中的 key 与 MySQl 数据库中的相同 key 相匹配来验证用户 session 。我使用随机数重新生成 session ,该随机数在每个页面加载时都受 MD5
Microsoft 模式与实践团队提供了一个很棒的 pdf,称为:“构建安全的 asp.net 应用程序”。 microsoft pdf 由于它是为 .Net 1.0 编写的,所以现在有点旧了。有谁知
在 Lua 中,通常会使用 math.random 生成随机值和/或字符串。 & math.randomseed , 其中 os.time用于 math.randomseed . 然而,这种方法有一个
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我们有一个严重依赖 Ajax 的应用程序。确保对服务器端脚本的请求不是通过独立程序而是通过坐在浏览器上的实际用户的好方法是什么 最佳答案 真的没有。 通过浏览器发送的任何请求都可以由独立程序伪造。 归
我正在寻找使用 WebSockets 与我们的服务器通信来实现 web (angular) 和 iPhone 应用程序。在过去使用 HTTP 请求时,我们使用请求数据、url、时间戳等的哈希值来验证和
我是一名优秀的程序员,十分优秀!