问题标签 [designated-initializer]
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.
c++ - 为什么 C++20 不支持乱序指定初始化器?
在阅读C++ 参考资料时,我对这一段有疑问:
注意:乱序指定初始化、嵌套指定初始化、指定初始化和正则初始化混合、数组的指定初始化在C编程语言中都是支持的,但在C++中是不允许的。
是否有任何技术原因阻止 C++ 支持乱序指定初始化?
c++ - 为什么 Clang 决定在 C++ 中允许指定初始化器?
我认为指定的初始化程序在 C++ 中已停止使用,并且仅在 C 中有效。但是,我遇到了一个简单的示例,该示例使用 clang++ 编译并正常工作。
g++:https ://rextester.com/AXIZ79197 (错误)
铿锵++:https ://rextester.com/UYVHHP56966 (作品)
vc++:https ://rextester.com/UCBEU10658 (错误)
g++ 和 vc++ 都无法编译,而 clang++ 工作得很好。还值得一提的是,g++ 和 vc++ 给出了不同的错误信息。vc++ 将指定的初始化程序与 lambda 表达式混淆了。我想我可以将此归咎于 g++ 是一个较旧的编译器这一事实,但我不确定。
问题:
- 为什么当 g++ 和 vc++ 不允许时,clang 决定允许指定的初始化程序?
- 这只是一个编译器错误还是有其他原因?
c - 为什么我不能在嵌套结构中初始化数组?
我想创建一个新结构,它是两个相同结构的组合。这些子结构中的每一个都包括一个双精度标量和一个三维数组。但是,当我尝试初始化结构时,我在尝试为数组赋值时遇到错误。
我没有编译错误,但是当我尝试查看嵌套结构中数组的值时,我看到了非常完全错误的疯狂数字。
你知道我在这里做错了什么吗?
c++ - 使用 C++ 中的自定义元素初始化 const 结构
我正在将一些 C 代码移植到 C++,并且我正在尝试用一些值初始化一个结构。我希望将结构存储在闪存(常量)而不是 RAM 中,并且它的值是 typedef'd 元素。
最初,我是这样的:
为了在 Flash 中实例化它们,我只需执行以下操作:
我知道这种类型的初始化在 C++ 中是不允许的。如何在 C++ 中实现它?
ios - 我可以从 Swift 扩展中的不同模型初始化 Codable 模型吗?
我有一个可编码的模型
我还有另一个模型,其中恰好有相同的变量。
现在,我想在扩展中MyCodableModel
使用实例化。由于依赖问题,MyOtherModel
我不想直接修改。MyCodableModel
我首先尝试在我的扩展中使用普通的初始化程序,但它说我需要使用 a convenience initializer
,所以我最终得到了这个:
但错误说'let' property 'id' may not be initialized directly; use "self.init(...)" or "self = ..." instead
。我认为这是因为我没有使用init(from: Decoder)
.
还有另一种方法可以做到这一点吗?或者我将无法转换MyOtherModel
为MyCodableModel
?
c++ - 具有模板化类型的 C++20 指定初始值设定项
指定的初始化程序 (C++20) 应该如何与 CTAD 一起使用?
此代码在 gcc9.2 中运行良好,但在 clang8 中失败
这应该是有效的吗?
c++ - C++20 中的 CTAD 和指定初始值设定项
我已经在这个问题中用指定的初始化程序对 CTAD 表示了混淆,但是我对非常相似的代码片段有另一个混淆
即使我没有在指定的初始化程序中给出明确的说明,演绎指南似乎first
也会将 的类型推断为。推导指南显然只关心初始化程序中的顺序,不管关键字 ( )。扣分指南应该聪明一点,还是应该有一个“指定扣减指南”?float
.first
.second
c - 在C中初始化由枚举索引的字符串数组
我希望根据 C 编程语言中的枚举来制作一个字符串数组。理想情况下,我想将其声明为常量,因此我想在编译时声明它,而不是在程序执行期间填充它。
例如,假设我有一个枚举:
我想这样初始化一个字符串数组:
有没有一种方法可以将其声明为常量,如下所示:
不必将字符串数组填充为:
c++ - 使用聚合初始化模拟默认函数参数是否有任何陷阱?
问题:
例如,如果你想要一个可变参数函数,它接受任意数量的参数Args&&...args
,并打印所有这些参数t
时间。更重要的是,您希望t
默认为1
,因此默认打印args
一次。
你会尝试的第一件事是:
显然,除非您显式传入模板参数,否则这不起作用:
因为模板推导时默认参数被视为普通参数,参数包始终为空。这会阻止您使该功能有用。(相关问题)
然后我决定使用聚合初始化(尤其是从 c++ 20 开始的指定初始化程序)来模拟更强大的“默认参数”。它看起来像这样:
此外,借助 c++ 20 指定的初始化程序,这可以解决人们无法“跳过”默认函数参数的抱怨:
我想知道这样做是否有任何潜在的陷阱。
背景(可以安全地忽略)
所以昨天我在SO附近闲逛,遇到一个问题(但后来被删除)询问如何将默认std::source_location
参数与可变参数模板结合起来:
显然,正如问题中所述,这不能按预期工作。所以我想出了以下代码:
但发现它可以做更多,因此这个问题。
c++ - 结构数组的嵌入式 C++ 静态初始化
在迁移到 C++ 时,我需要某个似乎已被弃用的函数。
sorry, unimplemented: non-trivial designated initializers not supported
在 C++ 中为内存约束系统实现以下数据存储系统的正确方法是什么?
通常建议使用std:map
or std:vector
。这是合适的,但list
它是不可变的,并且必须能够编译和链接到特定的闪存块。两者似乎都不适合这个目的。
我能达到的最高版本是 ARM Compiler 6,它是 C++14。