问题标签 [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.

0 投票
2 回答
4036 浏览

c++ - 为什么 C++20 不支持乱序指定初始化器?

在阅读C++ 参考资料时,我对这一段有疑问:

注意:乱序指定初始化、嵌套指定初始化、指定初始化和正则初始化混合、数组的指定初始化在C编程语言中都是支持的,但在C++中是不允许的。

是否有任何技术原因阻止 C++ 支持乱序指定初始化?

0 投票
1 回答
2045 浏览

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++ 是一个较旧的编译器这一事实,但我不确定。

问题:

  1. 为什么当 g++ 和 vc++ 不允许时,clang 决定允许指定的初始化程序?
  2. 这只是一个编译器错误还是有其他原因?
0 投票
1 回答
65 浏览

c - 为什么我不能在嵌套结构中初始化数组?

我想创建一个新结构,它是两个相同结构的组合。这些子结构中的每一个都包括一个双精度标量和一个三维数组。但是,当我尝试初始化结构时,我在尝试为数组赋值时遇到错误。

我没有编译错误,但是当我尝试查看嵌套结构中数组的值时,我看到了非常完全错误的疯狂数字。

你知道我在这里做错了什么吗?

0 投票
2 回答
64 浏览

c++ - 使用 C++ 中的自定义元素初始化 const 结构

我正在将一些 C 代码移植到 C++,并且我正在尝试用一些值初始化一个结构。我希望将结构存储在闪存(常量)而不是 RAM 中,并且它的值是 typedef'd 元素。

最初,我是这样的:

为了在 Flash 中实例化它们,我只需执行以下操作:

我知道这种类型的初始化在 C++ 中是不允许的。如何在 C++ 中实现它?

0 投票
0 回答
145 浏览

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).

还有另一种方法可以做到这一点吗?或者我将无法转换MyOtherModelMyCodableModel?

0 投票
1 回答
424 浏览

c++ - 具有模板化类型的 C++20 指定初始值设定项

指定的初始化程序 (C++20) 应该如何与 CTAD 一起使用?

此代码在 gcc9.2 中运行良好,但在 clang8 中失败

这应该是有效的吗?

请参阅https://godbolt.org/z/KtNI43上的示例

0 投票
1 回答
471 浏览

c++ - C++20 中的 CTAD 和指定初始值设定项

我已经在这个问题中用指定的初始化程序对 CTAD 表示了混淆,但是我对非常相似的代码片段有另一个混淆

即使我没有在指定的初始化程序中给出明确的说明,演绎指南似乎first也会将 的类型推断为。推导指南显然只关心初始化程序中的顺序,不管关键字 ( )。扣分指南应该聪明一点,还是应该有一个“指定扣减指南”?float.first.second

请参阅https://godbolt.org/z/cm6Yi7上的示例

0 投票
1 回答
264 浏览

c - 在C中初始化由枚举索引的字符串数组

我希望根据 C 编程语言中的枚举来制作一个字符串数组。理想情况下,我想将其声明为常量,因此我想在编译时声明它,而不是在程序执行期间填充它。

例如,假设我有一个枚举:

我想这样初始化一个字符串数组:

有没有一种方法可以将其声明为常量,如下所示:

不必将字符串数组填充为:

0 投票
1 回答
146 浏览

c++ - 使用聚合初始化模拟默认函数参数是否有任何陷阱?

问题:

例如,如果你想要一个可变参数函数,它接受任意数量的参数Args&&...args,并打印所有这些参数t时间。更重要的是,您希望t默认为1,因此默认打印args一次。

你会尝试的第一件事是:

显然,除非您显式传入模板参数,否则这不起作用:

因为模板推导时默认参数被视为普通参数,参数包始终为空。这会阻止您使该功能有用。(相关问题

然后我决定使用聚合初始化(尤其是从 c++ 20 开始的指定初始化程序)来模拟更强大的“默认参数”。它看起来像这样:

此外,借助 c++ 20 指定的初始化程序,这可以解决人们无法“跳过”默认函数参数的抱怨:

我想知道这样做是否有任何潜在的陷阱。

背景(可以安全地忽略)

所以昨天我在SO附近闲逛,遇到一个问题(但后来被删除)询问如何将默认std::source_location参数与可变参数模板结合起来:

显然,正如问题中所述,这不能按预期工作。所以我想出了以下代码:

但发现它可以做更多,因此这个问题。

0 投票
1 回答
184 浏览

c++ - 结构数组的嵌入式 C++ 静态初始化

在迁移到 C++ 时,我需要某个似乎已被弃用的函数。
sorry, unimplemented: non-trivial designated initializers not supported

在 C++ 中为内存约束系统实现以下数据存储系统的正确方法是什么?

通常建议使用std:mapor std:vector。这是合适的,但list它是不可变的,并且必须能够编译和链接到特定的闪存块。两者似乎都不适合这个目的。

我能达到的最高版本是 ARM Compiler 6,它是 C++14。