- 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/
我有一个 Cassandra 集群,里面有 4 个表和数据。 我想使用聚合函数(sum,max ...)发出请求,但我在这里读到这是不可能的: http://www.datastax.com/docu
我有以下两张表 Table: items ID | TITLE 249 | One 250 | Two 251 | Three 我投票给这些: Table: votes VID | IID | u
这个问题在这里已经有了答案: Update MongoDB field using value of another field (12 个答案) 关闭 3 年前。 我想根据另一个“源”集合的文档中
我的收藏包含以下文件。我想使用聚合来计算里面有多少客户,但我遇到了一些问题。我可以获得总行数,但不能获得总(唯一)客户。 [{ _id: "n001", channel: "Kalip
我有下表 Id Letter 1001 A 1001 H 1001 H 1001 H 1001 B 1001 H 1001 H 1001
得到一列的表 ABC。 “创建”的日期列。所以样本值就像; created 2009-06-18 13:56:00 2009-06-18 12:56:00 2009-06-17 14:02:0
我有一个带有数组字段的集合: {[ name:String buyPrice:Int sellPrice:Int ]} 我试图找到最低和最高买入/卖出价格。在某些条目中,买入或卖出价格为零
我有以下问题: 在我的 mongo db 中,我有以下结构: { "instanceId": "12", "eventId": "0-1b", "activityType":
下面给出的是我要在其上触发聚合查询的 Elasticsearch 文档。 { "id": 1, "attributes": [ { "fieldId": 1,
我正在使用 Django 的 aggregate query expression总计一些值。最终值是一个除法表达式,有时可能以零作为分母。如果是这种情况,我需要一种方法来逃避,以便它只返回 0。 我
我正在学习核心数据,特别是聚合。 当前我想要做的事情:计算表中在某些条件上具有逆关系的多对关系的记录数。 目前我正在这样做: NSExpression *ex = [NSExpression expr
我需要有关 Delphi 中的 ClientDatasets 的一些帮助。 我想要实现的是一个显示客户的网格,其中一列显示每个客户的订单数量。我将 ClientDataset 放在表单上并从 Delp
我的集合有 10M 个文档,并且有一个名为 movieId 的字段;该文档具有以下结构: { "_id" : ObjectId("589bed43e3d78e89bfd9b779"), "us
这个问题已经有答案了: What is the difference between association, aggregation and composition? (21 个回答) 已关闭 9
我在 elasticsearch 中有一些类似于这些示例的文档: { "id": ">", "list": [ "a", "b", "c" ] } { "id"
我正在做一些聚合。但是结果完全不是我所期望的,似乎它们没有聚合索引中与我的查询匹配的所有文档,在这种情况下 - 它有什么好处? 例如,首先我做这个查询: {"index":"datalayer","t
假设我在 ES 中有这些数据。 | KEY | value | |:-----------|------------:| | A |
可能在我的文档中,我有一个被分析的文本字段。我只是在ElasticSearch AggregationAPI中迷路了。我需要2种不同情况的支持: 情况A)结果是带有计数标记(条款)的篮子下降。 情况B
我正在为网上商店构建多面过滤功能,如下所示: Filter on Brand: [ ] LG (10) [ ] Apple (5) [ ] HTC (3) Filter on OS: [ ] Andr
我有一个父/子关系并且正在搜索 child 。 是否可以在父属性上创建聚合? 例如parent 是 POST,children 是 COMMENT。如果父项具有“类别”属性,是否可以搜索 COMMEN
我是一名优秀的程序员,十分优秀!