问题标签 [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 指定初始化程序失败,编译器错误或功能?
我直到凌晨 1 点才发现我的代码中的一个错误,而我的发现让我感到非常惊讶。实际代码非常复杂,涉及包含结构联合的结构联合等,但我已将问题提炼为以下简化的失败案例。
正在发生的事情是编译器 [gcc 5.4.0] 正在更改指定初始化程序的执行顺序,以匹配它们在结构中出现的顺序。只要您使用没有顺序依赖性的常量或变量初始化结构,这不会导致任何问题。查看以下代码。它表明编译器清楚地重新排序了指定的初始值设定项:
输出如下:
我怀疑优化器,但我使用每个可能的优化级别尝试了相同的代码,并且重新排序仍然发生。所以这个问题在基础编译器中。
我有一个解决方案,所以这更像是对其他人的警告和一般性问题。
有没有其他人见过或注意到这个问题?
这是预期/指定的行为吗?
swift - 如何声明具有比超类更多参数的子类指定初始化程序?
与来自超类的初始化程序相比,我正在制作一个带有额外参数的子类指定初始化程序,但是,我得到了一个错误。代码是:
我得到了错误
'required' 初始化器 'init(from:)' 必须由 'Pregunta' 的子类提供
有什么问题?我读到我只需要使用带有超类初始化程序的 super.init。提前致谢。
c++ - 在 C++ 中初始化指向结构的指针数组
可以使用复合文字来初始化指向 C 中结构的指针数组。
在 C 中:
这如何在 C++ 中完成?
我还看到了不使用复合语句在 C++ 中初始化结构的区别:
c - 来自 GCC 但不是 Clang 的复合文字和指定初始化程序警告
用gcc -std=c99 -Wextra
这段代码编译:
给我一个警告:
但是指定的初始化程序应该将其余成员初始化为零,即使它们被省略。
为什么要发出警告?(clang
编译相同的代码没有警告)
c++ - 使用命名的desigator列表的C ++结构公共成员构造?
以下代码在g++
.
我知道{ .a = 23, .b = 'e', .name = "Hello" }
C++ 不支持 C99 等效项,但为什么支持上述内容?是否标准化?这个构造函数习语叫什么名字?
从上面的角度来看,如果你的系统有很多用于线程安全消息传递的不可变类(所有const
和public
成员),那么使用命名成员构造这样一个类的实例要容易得多,而不是编写一个构造函数并使用位置参数。
objective-c - Objective-C:最小的 init 与调用 initWith 的 init?
大多数类中的方法 init 进行了最小化的初始化,因为如果您需要更复杂、更多的 has-a 相关行为,那么您需要使用 initWith 方法。那么为什么有人会从 init 方法中调用 initWith 呢?我见过这个,甚至在苹果的网站上也提到过,但它似乎隐藏了应该明确命名的行为。
ios - 调用 super.init(nibName: nibNameOrNil, bundle: nil) 时对成员 'init(coder:)' 的模糊引用
在尝试以编程方式将可可豆荚 BWWalkthrough 实施到我当前的项目中时,我遇到了初始化函数/继承的问题。
我试图在我自己的类 GetStartedViewController 中继承 BWWalkThroughViewController。
这是来自 BWalkThroughViewController 的代码,它是 UIViewController 的子类:
但是,当我尝试在自己的类中继承 BWWalkthroughViewController 时,在调用 super.init(nibName, bundle) 和另一个错误(初始化程序不会覆盖指定的初始化程序它的超类)当我尝试覆盖init(nibname,bundle)时:
我尝试了仅包含公共初始化或仅包含覆盖初始化而不是两者的不同变体,因此我将两者都包含在内以显示错误。
即使当我使用自动完成来调用 super.init 时,显示的只是带有 nscoder 参数的函数,而不是带有 nibName 和 bundle 的函数。
有人可以帮我理解为什么会发生这个错误以及如何解决它吗?我不明白为什么我不能调用 super.init(nibName, bundle) 或覆盖该函数。
c++ - 构造函数干扰成员变量指定的初始化程序?
一段时间以来,人们已经能够在 GCC 中使用“指定初始化程序”:
但是,当我添加构造函数时,标签将被忽略。
换句话说,带有构造函数的初始化语法使标签表现得就像一个注释!,这可能非常令人困惑,但最重要的是,它非常奇怪。
我偶然发现了这一点,与gcc 8.1 -std=c++2a
.
这是预期的行为吗?
参考:https ://en.cppreference.com/w/cpp/language/aggregate_initialization
c - gcc 编译器报告警告,但 a.out 工作顺利,否则
我正在关注《C Primer Plus》这本书,遇到了这样一段代码:
当我编译它时它会报告错误:
尽管如此,./a.out
工作正常。
我很困惑我应该从错误报告中学到什么?