initializer-list 相关问题

std :: initializer_list是C ++ 11中的一种特殊类型,用于从相同类型的值列表构造容器和其他类型。可以实现为一对指针或指针和长度,其存储可以是自动,临时或静态只读。

对象与 {} 的比较

默认构造的对象通常表示“已初始化,但未存储值”状态。例如,默认构造的 std::unique_ptr 不指向任何东西(实际上

回答 1 投票 0

从初始化列表中捕获多个异常

如果我在构造函数体内初始化成员字段,我可以通过用 try-catch 块包围每个变量初始化来单独捕获异常。例如: #包括 如果我在构造函数体内初始化成员字段,我可以通过用 try-catch 块包围每个变量初始化来单独捕获异常。例如: #include <memory> struct A { std::unique_ptr<int[]> data1, data2; A(); }; A::A() { try { data1 = new int[5]; } catch (std::bad_alloc& ex) { /* Do something */ } try { data2 = new int[5]; } catch (std::bad_alloc& ex) { /* Do something */ } } 在代码中,当 data1 或 data2 分配失败时,我可能想做一些不同的事情。 现在,直接在初始化列表中初始化 data1 和 data2 怎么样?我仍然可以捕捉bad_alloc,正如这里和这里所讨论的: #include <memory> struct A { std::unique_ptr<int[]> data1, data2; A(); }; A::A() try : data1{new int[5]}, data2{new int[5]} { } catch (std::bad_alloc& ex) { /* Do something */ } 这样做,但是,当捕获 bad_alloc 时,我不知道这是否是由 data1 或 data2 的新语句引发的。 我可以区分 data1 和 data2 的初始化是否会抛出不同的异常;这里的情况并非如此。 如何区分初始化列表中可能引发的异常? 尝试将您的新闻包装在成员函数中。捕获这些函数中的异常,并采取相应的行动。 #include <memory> struct A { std::unique_ptr<int[]> data1, data2; A(); private: std::unique_ptr<int[]> wrap_data1(); std::unique_ptr<int[]> wrap_data2(); }; std::unique_ptr<int[]> A::wrap_data1() { try { return std::make_unique<int[]>(5); } catch (std::bad_alloc& ex) { std::cout << "Allocation for data1 failed: " << ex.what() << std::endl; throw; } } std::unique_ptr<int[]> A::wrap_data2() { try { return std::make_unique<int[]>(5); } catch (std::bad_alloc& ex) { std::cout << "Allocation for data2 failed: " << ex.what() << std::endl; throw; } } A::A() try : data1{wrap_data1()}, data2{wrap_data2()} { } catch (std::bad_alloc& ex) { /* Do something */ }

回答 1 投票 0

为什么 constexpr 会阻止此语句中的自动类型推导?

在下面如果我使用 constexpr 编译器显然编译器说“表达式必须有一个常量值”,这发生在 MSVC 和 GCC 上: int main() { constexpr auto nnn = ...

回答 1 投票 0

为什么没有找到带有 std::initializer_list 参数的函数,尽管尝试使用“using”声明来考虑它

我正在尝试使用 using 声明来考虑函数: 命名空间 n { 结构体S{}; bool equal(S a, S b, std::vector = {1,2}) { return false; } } } int main() {...

回答 1 投票 0

为什么尽管尝试使用 using 声明将其考虑在内,但仍找不到带有initializer_list参数的函数

我正在尝试使用 using 声明来考虑函数: 命名空间 n { 结构体S{}; bool equal(S a, S b, std::vector = {1,2}) { return false; } } } int main() { ...

回答 1 投票 0

自定义类工作异常的 C++ 初始化程序列表

任何人都可以帮我理解下面的代码有什么问题吗? 我正在使用 C++20 我正在初始化“Interval”类向量的向量,但它被初始化为 0。 #包括<...

回答 1 投票 0

类成员初始化C++11的差异[重复]

在类(B 类)中初始化对象成员变量 m_A 与在初始化器列表(C 类)中初始化有什么区别?是否有一种方法比其他方法更有效或通常更受青睐......

回答 1 投票 0

类成员初始化C++的区别

在类(B 类)中初始化对象成员变量 m_A 与在初始化器列表(C 类)中初始化有什么区别?是否有一种方法比其他方法更有效或通常更受青睐......

回答 1 投票 0

使用初始化列表来初始化向量

我不明白为什么它不允许我使用以下语法直接初始化向量: stl::向量 v{1, 2, 3}; 我从头开始实现了向量和

回答 1 投票 0

带有 std::map 初始化列表的构造函数

按照这个问题中不扩展 std 容器的建议,我正在创建自己的类型并使用 std::map 作为类属性。 我正在重新创建我想要的公共接口函数...

回答 1 投票 0

当我尝试在C++编译时创建initializer_list时有些麻烦

std::initializer_list 是一个有用的工具,可以在 C++ 中初始化许多容器,当我尝试使用 C++ 模板生成算术级数时,我发现它存在一些问题。 下面是一个

回答 1 投票 0

为什么我不能在不显式构造中间对象的情况下使用 std::vector::emplace_back,尽管实例创建不需要中间对象?

我使用 OneOrMoreIntHelper 类,它既接受单个整数,也接受整数的初始值设定项列表,并且非常适合通过单个构造函数构造 Class 的实例。 嗬...

回答 1 投票 0

带有文字列表的范围 for 循环?

在C++11中,是否可以写成下面的样子 int ns[] = { 1, 5, 6, 2, 9 }; for (int n : ns) { ... } 像这样的东西 for (int n : { 1, 5, 6, 2, 9 }) { // VC++11 拒绝这种形式 ... }

回答 2 投票 0

是否可以合并2个initializer_list?

在cpp中我们可以用initializer_list构造一些类的对象: std::initializer_list> il = { {"CPU", 10}, {"GPU", 15} }; ...

回答 1 投票 0

当我在初始化表达式中使用逗号运算符时,C++ 在做什么?

我的程序崩溃了,没有可用的调试器,所以我用 printfs 来控制它,将其缩小到(冗长的)初始化列表,并尝试让它显示哪个初始化表达式导致...

回答 2 投票 0

如何在可变数量的参数中传递 std::initializer_list ?

我想在打印每个参数的函数的可变数量参数内传递一个 std::initializer_list 。 func( 1, 2.5, 'a', "你好", {10, 20, 30, 40 } ); 期待这个

回答 1 投票 0

在 C++ 中是否可以通过模板值来专门化可变数量的参数?

假设我有以下模板类: 模板类虚拟{ 民众: // 功能 私人的: int arr[R]; }; 是否可以创建一个接受

回答 1 投票 0

无法在字典是静态的抽象类中初始化 C# 中的字典列表

我有这个抽象类,我尝试用对象初始化字典 但有人不让我 公共抽象类 ICharacterBody3DState { 公共静态词典 我有这个抽象类,我尝试用对象初始化字典 但有人不让我 public abstract class ICharacterBody3DState { public static Dictionary<StateInput, ICharacterBody3DState> State = new Dictionary<StateInput, ICharacterBody3DState>() { StateInput.sprint=new StateInput(), }; } 每个状态都继承自这个抽象类: public class WalkingState : ICharacterBody3DState { } 但它给了我: CS0747:无效的初始值设定项成员声明符。 有没有办法用对象初始化抽象类字典? public abstract class ICharacterBody3DState { public static Dictionary<StateInput, ICharacterBody3DState> State = new Dictionary<StateInput, ICharacterBody3DState>() { { StateInput.sprint, new StateInput() }, }; } 将每个键和值放在花括号{}内,并用comma分隔它们。这是向字典添加项目的正确方法。

回答 1 投票 0

concat std::vector 和初始化列表

在 c++11 中你可以实现这个美妙的语法: 向量数字 = {1, 2, 3}; 有没有办法将进一步的初始化列表连接到现有向量上? 数字。??? ({4,5,6}); 或者 ...

回答 3 投票 0

使用结构复制构造进行聚合初始化

有没有办法在 C++ 中模仿 Kotlin 的数据类“copy()”? 这允许在单个表达式中复制对象并修改其特定部分,请参阅 Kotlin 示例: 数据类 SomeData(...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.