问题标签 [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 回答
63 浏览

c++ - 使用指定的初始值设定项时,我可以强制用户为成员提供值吗?

我创建了一个选项结构,旨在通过指定的初始化程序使用:

不幸的是,因为bool有一个默认构造函数,所以这样做也是有效的:

但我不想要这个;我希望 Foo 的用户明确决定是否启用网状结构。我可以通过这种方式通过运行时错误来实现这一点:

但我更愿意使用编译时错误来执行此操作。有没有办法做到这一点?如有必要,我可以更改boolSomeWrapper<bool>,只要我可以像初始化SomeWrapper<T>一样进行初始化T,但没有默认初始化程序。

0 投票
3 回答
551 浏览

swift - 为什么不能初始化具有默认实现的协议?

我已经阅读了In swift,为什么我不能实例化具有初始化程序的协议?

我的问题集中在为什么编译器不能查看您的默认实现并基于它初始化对象?

无法实例化协议类型“ViewModel”

问题1:

为什么 Swift 不允许协议的原始初始化?为什么它必须与具体类型相关联?

我知道它不是一个具体的类型。但是为什么编译器不允许你创建一个只有协议默认值的类型呢?!是不是因为编译器就像嘿听一样,而我可以您视为接口/协议或实际类型。我不能认为你们两个!?你要么是记忆中的真实存在,要么只是一个蓝图。

如果语言可以检查扩展是否为所有需求提供了实现,那么允许将其初始化为特殊情况是否有意义?(我知道它没有,但想知道的是唯一需要让它工作)或者即使那样这也没有意义。如果是,为什么?

此外,我尝试这样做:

如果我注释掉 LineA 那么我会得到一个错误

在从初始化程序返回之前,不会在所有路径上调用“self.init”

问题2:

为什么?为什么init必须调用self.init()它似乎有点像递归循环。

0 投票
2 回答
8831 浏览

c++ - C++20 中的指定初始化器

我有一个关于 c++20 功能的问题,指定初始化程序(有关此功能的更多信息,请点击此处

-Wall -Wextra -std=gnu++2a这段代码是用 gcc 9.2.0 和标志编译的。

正如您在上面看到的,结构PersonEmployee都是聚合,但是Employee使用指定的初始化程序无法初始化聚合。

有人可以解释一下为什么吗?

0 投票
2 回答
194 浏览

c - 使用指定的初始化程序使用 `char []` 成员初始化嵌套结构

我有以下嵌套struct定义:

就其Purchase struct本身而言,以下初始化程序起作用:

对于嵌套结构Acct,以下工作:

但是当我尝试使用成员名称时,如第一个示例所示:

我收到此错误: 22, 131 error: array type 'char [50]' is not assignable 使用会员char item[50]; in购买时`

我得到这个错误:22, 14 error: initializer element is not a compile-time constant 当使用成员char *item;Purchase (注意只有一个版本itemstruct任何时候的一部分,另一个被评论)

因此,总而言之,如果不使用/* 2 */上述语句中的命名赋值语句,我可以初始化嵌套结构,但是当我尝试使用命名赋值时,如char []语句中的类型所示/* 3 */,它会失败。

char []初始化 a或char *当它是嵌套结构构造的内部结构的成员时,我缺少什么?

我正在使用CLANG设置为 C99

0 投票
2 回答
322 浏览

c++ - C++20 指定初始值设定项 char[]

C++20 引入了指定初始化器。我正在尝试使用新语法初始化结构内的字符数组。

非常简单的问题,我认为代码可以最好地解释它

我发现这种行为集市,这char str[12] = "hello";条线工作得很好。但是相同的初始化形式在指定的初始化列表中不起作用。

问题:为什么我不能用字符串文字初始化 char 数组?

编辑

我以前使用的是 GCC。 这适用于铿锵声。GCC 是否有解决方法,clang 或 GCC 是否正确?

0 投票
1 回答
86 浏览

c - C中的指定初始化数组

我正在尝试使用指定的初始化程序初始化结构数组:

列表.h:

主程序

但是,这是我收到的以下错误:

在此处输入图像描述

我正在使用 MinGW gcc 和命令提示符来编译这段代码,我正在 Visual Studio 中编写这段代码。

0 投票
2 回答
101 浏览

c - 为什么不能使用复合文字来分配已定义的、固定大小的数组?

为什么在示例代码中使用复合文字(案例 b)定义结构后可以分配结构,而数组不能(案例 c))?

我知道情况 a) 不起作用,因为此时编译器不知道分配的 rhs 上的内存布局。它可以是任何类型的演员表。但是按照这条线,在我看来,案例 c) 是一个完全明确的情况。

编辑:我知道我不能分配给一个数组——这就是 C 的设计方式。我可以使用 memcpy 或单独分配值。

在阅读了下面的评论和答案之后,我想现在我的问题分解为一个永远争论不休的难题,即为什么不能分配给数组。

正如这篇文章和下面MM的评论所建议的那样,更令人费解的是,以下分配是完全有效的(当然,它违反了严格的别名规则)。您可以将数组包装在结构中并进行一些讨厌的转换来模仿可分配数组。

那么是什么阻止开发人员将这样的功能包含在C22(?)

0 投票
1 回答
141 浏览

swift - 您如何使用自己的源和元素正确地对 SCNGeometry 进行子类化?

尝试创建我自己的自定义SCNGeometry子类,类似于框架的SCNBox, SCNPyramid,SCNCapsule等。我已经建立了我的源数组和元素数组,但是下面是一个方便的初始化器,而不是指定的初始化器!

我知道的唯一一个是,super.init()但如果你使用它,源和元素是只读的。

尝试失败

我试图简单地调用super.init(), 然后用我自己的数组覆盖sourcesandelements属性,但无济于事。

注意:这两个数组与我直接传递给上面的便利初始化程序的两个数组完全相同,同时设置了材质,而且效果很好,所以我知道数组都是正确的。然而,这不起作用,所以在那个便利初始化程序中显然发生了其他事情,但我看不出是什么。SCNGeometry

真的很遗憾,Apple 实际上并没有向您展示此类事情的来源,也没有关于它的良好文档。我的意思是他们标记SCNGeometryopen,但是没有给你任何关于如何实际使用它的信息,而且很多 API 文档都是空白的!

解决方法

我已经完成了所有信息以成功构建我的源和元素(同样,我试图传递给我的上面的类),并确认它可以正常工作并使用便捷初始化程序正确呈现,然后是材料属性,所以从技术上讲,我可以将所有这些包装在一个静态工厂函数中并完成它,但我真的想在这里遵循 Apple 的 API,您可以通过初始化程序实例化几何,而不是工厂函数,所以我不想让这个去。成功完成从第 2 步到第 n 步的所有步骤真的很糟糕,只是在第一步完全跳闸……初始化!

那么,什么是指定的初始化器SCNGeometry,让我可以指定我自己的顶点和材质等,如果没有,如何在使用时指定该信息super.init()

0 投票
3 回答
122 浏览

c++ - 什么是指定初始化器?

我希望了解指定初始化程序提供的与直接初始化不同的内容。

例如:

我们如何去装饰这两条线?对于细心的,有什么区别?

0 投票
2 回答
80 浏览

c - 是否可以使用指定的初始化器将字段单元化?

考虑以下结构和函数来创建结构:

在我的情况下,我需要stuff.magic初始化为给定的值,并将stuff.is_valid数组初始化为零,但我不想初始化stuff.values(因为它们被保护stuff.is_valid并稍后按需初始化)。

我可以使用指定的初始化器来实现这一点吗?

我知道我可以在没有的情况下实现它,但这更丑陋且更容易出错(除其他原因外,因为我现在需要显式归零stuff.is_valid,也许使用 memset)。