std :: initializer_list是C ++ 11中的一种特殊类型,用于从相同类型的值列表构造容器和其他类型。可以实现为一对指针或指针和长度,其存储可以是自动,临时或静态只读。
在 msvc 的 constexpr 上下文中未调用构造函数体
我试图将初始值设定项列表传递给结构的构造函数,其参数是 std::vector,但我在 Visual Studio 社区中得到了意外的结果。这是重现的代码...
我有一堆较长的手动初始化数组,例如: const std::array a{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; const std::array b{16,17,18,19,20,21,22,23,24,25,26...
寻找具有连续整数的 std::initializer_list 的快捷方式
我有一堆较长的手动初始化数组,例如: const std::array a{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; const std::array b{16,17,18,19,20,21,22,23,24,25,26...
我有一个派生类接口,我的基类需要为其定义以下三个受保护成员数组: 模板类基{ 民众: 静态 constexpr size_t n_ = n...
我正在为下面的A类编写构造函数。 mutex_array 调用默认的 std::mutex 构造函数,这很好。然后我想从...的每个元素构造 unique_lock_array 的每个元素
我创建了两个类 - 一个可以通过转换运算符转换为另一个: 结构体MyClass{}; 结构体MyClass2{ 运算符 MyClass() const { 返回 MyClass{}; } }; 以及专门的技术人员...
为什么只有在我用大括号初始化一个对象时才需要从 int 到 float 的缩小转换? [重复]
我遇到了一件我认为很奇怪的事情: #包括 int numqueues = 1; std::vector 优先级{numqueues, 1.f }; //^^^ 警告:缩小 numqueues 从 int 的转换...
为什么 std::flat_set 和 std::flat_map 具有 std::initializer_list 的重载构造函数,而其他容器适配器则没有?
我注意到 C++23 为 std::stack 和 std::queue 容器适配器的构造函数添加了新的重载,允许使用范围 [first, ...
如何在 Dart 中使用默认的非常量初始化器来初始化类的非空成员?
我正在尝试添加默认初始化程序: 类 Foo { 约会时间?日期; Foo({this.date}) { 日期 ??= DateTime.now(); } } 类 Foo2 { 日期时间日期; Foo2({this.date}) : 日期 ??= 日期时间....
为什么只有一行告诉我operator=不可行?但其他人都还好?
我已经调试了将近6个小时了,我快要放弃了。 是的,这只是一个学校项目。但我已经上交了我的副本,现在我只想知道为什么它不起作用......
我有一个列表框,当从 Excel 工作表中单击按钮时,应该在初始化中显示条目。 该按钮正在调用一个模块来显示表单。 模块代码: 选项显式 子翔...
这个问题与这里讨论的问题相关。 我尝试使用初始值设定项列表来创建要传递给运算符[] 的参数。 #包括 #包括 结构体A { ...
如何制作一个构造函数,让我可以使用花括号初始化列表进行构造?
我的 Phenotype 类具有以下构造函数: 表型(uint8 init[NUM_ITEMS]); 我可以创建这样的表型: uint8 数据[] = {0,0,0,0,0}; 表型 p(数据); 但我收到一个错误...
如何制作一个构造函数,让我可以使用花括号初始化列表进行构造?
我的 Phenotype 类具有以下构造函数: 表型(uint8 init[NUM_ITEMS]); 我可以创建这样的表型: uint8 数据[] = {0,0,0,0,0}; 表型 p(数据); 但我收到一个错误...
在 Visual C++ 编译器中使用 std::initializer_list 2012 年 11 月 CTP
我想像本例中的人一样在 Visual Studio 2012 中使用 std::initializer_lists 。我的操作系统是 Windows 8 x64。 因此我最近在 2012 年 11 月安装了 Visual C++ 编译器...
我有一个数据类(就像C意义上的结构:一个只有一堆属性的类),我用它来初始化(我认为是通过隐式复制构造函数)用大括号初始化。 .
如果类具有带有虚方法的基类c ++,则使用initializer_list初始化类实例
如果类具有带有虚方法c ++的基类,如何使用initializer_list初始化类实例?我想避免编写构造函数并使用“惰性”方式来初始化类,例如 X x{"
我可以保留 std::initializer_list<T>::begin() 返回的地址吗?
我有一些数据类的静态实例,它们保存在整数数组上,简化如下: 类 ReadableIds { 民众: 常量 int * ids; ReadableIds( const int * _ids ...
这是我的继承结构的最小可重现示例: #包括 A类{ 受保护: 诠释 x; 民众: A() : x(5) { } A(int a) : x(a) { } 得到……
错误:‘std::array<std::counting_semaphore<1>, 4>’的初始化器太多
下面的代码片段无法编译。我尝试了不同的初始值设定项但无法编译。 #包括 #包括 主函数() { std::数组 以下代码片段无法编译。我尝试了不同的初始化器,但无法编译。 #include <array> #include <semaphore> int main() { std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} }; auto& [ lock1, lock2, lock3, lock4 ] { semaphores }; } 这是错误信息: SO.cpp:8:74: error: too many initializers for ‘std::array<std::counting_semaphore<1>, 4>’ 8 | std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} }; | ^ 难道不能声明一个binary_semaphore数组吗?正确的语法是什么? 一般来说,你可以这样写,比如再添加一对大括号 std::array<std::binary_semaphore, 4> semaphores { { {0}, {0}, {0}, {0} } }; 否则第一个初始化器{0}被认为是整个std::array类型对象的初始化器。 然而还有一个问题。构造函数是显式的。 constexpr explicit counting_semaphore(ptrdiff_t desired); 所以你需要在初始化器中使用显式构造函数。 例如 std::array<std::binary_semaphore, 4> semaphores { { std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 } } }; 在这种情况下,您也可以在不引入额外大括号的情况下编写 std::array<std::binary_semaphore, 4> semaphores { std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 }, std::binary_semaphore{ 0 } }; 看来问题与explicit的std::binary_semaphore构造函数有关。 下面的代码编译: #include <array> #include <semaphore> int main() { std::array<std::binary_semaphore, 4> semaphores { std::binary_semaphore { 0 }, std::binary_semaphore { 0 }, std::binary_semaphore { 0 }, std::binary_semaphore { 0 } }; auto& [ lock1, lock2, lock3, lock4 ] { semaphores }; } 虽然看起来不整洁。