在标准库中可以找到一个主要而明显的含义-“使用其元素列表初始化html" target="_blank">集合”:
std::vector<int> v = {1, 2, 3};
在下面std::bitset上的链接后面可以找到另一个含义——“单个值是由initializer\u list的元素组合而成的”。
标准库中的第三个示例是std::piecewise\u constant\u distribution,但我不知道它有什么语义,而不是元素的集合。
std::initializer\u list构造函数的其他用例是什么?如果可能,请提供真实代码的示例。
这实际上是一个关于课堂设计的问题
由于列表初始化的某些特殊性,向现有类添加std::initializer\u列表构造函数很容易成为一个令人惊讶的突破性更改,因此在编写新类时,您应该始终提前知道它是否需要std::initializer\u列表构造函数<因此,我试图通过编写std::initializer\u list构造函数的用例来模拟预见未来的能力。
主要问题是:我如何确定我的类将来可能会有(对用户来说并不奇怪)std::initializer_list构造函数来编写正确的非std::initializer_list构造函数?
我认为intializer_list有以下主要特点:
例如,您可能希望参考我的博客和ISOCPP信息。
编辑
std::initializer_list的可能优势
//1. Initialization Concept In A class
std::initializer_list<int> x{1,2,3,4,5};
std::vector<int> v(x.begin(), x.end());
//2.Better Type Safety and avoid narrow conversions scenario
std::vector<int> v{1, 2, 3.4, 4};
Compiler Output
narrowing conversion of ‘3.3999999999999999e+0’ from ‘double’ to ‘int’ inside { }
//3. Provide Const iterator type interface
std::initializer_list<int> ly{1,2,3,4,5};
auto itrs = ly.begin();
int* x = itrs;
Compiler Output
error: invalid conversion from ‘const int*’ to ‘int*’
实际上,我正在我当前的项目中使用这种技术。我有一个类“BaseMenu”,它需要在它的构造函数中初始化std::vector,所以它的参数是std::vector。然后,我有一个从BaseMenu继承的主菜单,我只是告诉BaseMenu我想要的主菜单是什么样子:
BaseMenu(std::vector<std::string>);
MainMenu::MainMenu():
BaseMenu({{"Play"},
{"Options"},
{"About"},
{"Quit"}})
真的很“舒服”。PS:上面的模型被简化了,但它应该给人一种std::initializer\u list有用的感觉
主要内容:类继承和初始化,初始化器继承和覆盖在Swift 4中声明的类,结构体和枚举初始化以准备类的实例。 存储属性初始化初始值,对于新实例也初始化值,初始化值以准备初始实例数据。 创建初始化由方法执行。 Swift 4初始化程序与Objective-C的不同之处在于它不返回任何值。 它是在处理之前检查新创建实例的初始化。 Swift 4还提供了“取消初始化”过程,用于在取消分配实例后执行内存管理操作。 存储属性的初始化程序角色 存储属性必
我想这样使用std::ostream: 有一个错误,说ostream构造函数受到保护: 错误:'std::basic_ostream 但我记得
是缺乏 一个疏忽?它对我来说似乎非常有用,动态容器(如)确实有一个类似的构造函数。 我完全意识到 但这不是构造函数,内存将首先清零。如果我想让所有人都像这家伙一样呢?
问题内容: 我如何使用该字段注入包含Map的属性文件,以用作其他构造函数arg。 从属性文件加载地图 该bean当前使用以下命令进行设置: 相当于Java: 谢谢 问题答案: 像这样: 这利用了使用任意静态工厂方法创建bean的能力,在这种情况下,使用工厂工厂方法来创建bean,然后将其注入到的适当构造函数中。
问题内容: 我在作业上碰壁,一直在梳理网站以寻求任何有用的信息(出现空白)。我需要创建一个类,在该类中创建一个构造函数,然后再创建一个子类以扩展超类。然后,我需要使用main方法创建一个新文件来演示这两种情况。从概念上来说没问题。 我的问题是:如何使用构造函数初始化对象,但需要用户输入? 现在我得到的错误是:“类CarRental中的构造函数CarRental无法应用于给定类型;必需:String
问题内容: 我正在编写Python代码以生成和绘制“超高斯”函数,如下所示: 下面的代码只是作图。由于某种原因,我无法理解,当将默认值8用于或最多13时,此代码可以正常工作。当值为14或更高时,该函数崩溃并显示错误消息: 在函数定义的返回行。有任何想法吗?由于该行中唯一使用.exp的东西是错误消息,似乎暗示它被解释为浮点数,但仅适用于…的较大值。 我正在用numpy 1.7.1和scipy 0.1