std :: initializer_list是C ++ 11中的一种特殊类型,用于从相同类型的值列表构造容器和其他类型。可以实现为一对指针或指针和长度,其存储可以是自动,临时或静态只读。
如果 C++11 中存在 `std::initializer_list` ctor,如何使用默认成员初始值设定项?
考虑以下代码: #包括 结构体A { A(整数,整数){ std::cout << "A::A(int, int)\n"; } A(std::initializer_list) { ...
在向量的 std::initializer_list 上调用 std::views::join 时出错
我想连接多个视图,而不使用临时变量(如示例中的 arr_and_zeroes )。但是,这样做会产生编译错误。 有没有什么方法可以不使用临时
由于某种原因,由于const字段_constFoo的初始化,编译器无法为该类生成operator=,我只是想知道为什么。使用VS2010。 类 Foo { 民众: ...
C++11标准是否保证initializer_list对象的内存布局是跨编译器兼容的?
vc++ 实现 std::initializer_list 如下: 模板 类初始值设定项列表 { 民众: // ... 私人的: const value_type* _first; const value_type* _last; }; 哈...
通过反复试验,我注意到某些 C++11 功能依赖于某种编译器魔法 (TM)。 我一直在努力实施我自己的标准
将不需要位于初始值设定项列表中的类成员变量放入初始值设定项列表中是否有任何好处?例子: 类 Foo { 民众: 富() {} }; 类酒吧 { 民众: 酒吧...
事实上,我正在尝试实现类似于 std::initializer_list 的东西,但具有自定义初始化规则。 假设我们有结构体 A 和结构体 B: 结构A { 字符a[16]; 整数b; 浮动 c;...
我编写了一个具有两个重载的函数 - 一个用于单个指针,一个用于指针向量。在代码中的某个时刻,我想将一个空向量传递给函数并使用 {} 作为参数...
我的问题与我的另一个问题紧密相连。我一直在努力初始化包含联合结构成员的数组。 假设我在 C++1 中有以下声明...
默认构造的对象通常表示“已初始化,但未存储值”状态。例如,默认构造的 std::unique_ptr 不指向任何东西(实际上
如果我在构造函数体内初始化成员字段,我可以通过用 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 */ }
在下面如果我使用 constexpr 编译器显然编译器说“表达式必须有一个常量值”,这发生在 MSVC 和 GCC 上: int main() { constexpr auto nnn = ...
为什么没有找到带有 std::initializer_list 参数的函数,尽管尝试使用“using”声明来考虑它
我正在尝试使用 using 声明来考虑函数: 命名空间 n { 结构体S{}; bool equal(S a, S b, std::vector = {1,2}) { return false; } } } int main() {...
为什么尽管尝试使用 using 声明将其考虑在内,但仍找不到带有initializer_list参数的函数
我正在尝试使用 using 声明来考虑函数: 命名空间 n { 结构体S{}; bool equal(S a, S b, std::vector = {1,2}) { return false; } } } int main() { ...
任何人都可以帮我理解下面的代码有什么问题吗? 我正在使用 C++20 我正在初始化“Interval”类向量的向量,但它被初始化为 0。 #包括<...
在类(B 类)中初始化对象成员变量 m_A 与在初始化器列表(C 类)中初始化有什么区别?是否有一种方法比其他方法更有效或通常更受青睐......
在类(B 类)中初始化对象成员变量 m_A 与在初始化器列表(C 类)中初始化有什么区别?是否有一种方法比其他方法更有效或通常更受青睐......
我不明白为什么它不允许我使用以下语法直接初始化向量: stl::向量 v{1, 2, 3}; 我从头开始实现了向量和
按照这个问题中不扩展 std 容器的建议,我正在创建自己的类型并使用 std::map 作为类属性。 我正在重新创建我想要的公共接口函数...
当我尝试在C++编译时创建initializer_list时有些麻烦
std::initializer_list 是一个有用的工具,可以在 C++ 中初始化许多容器,当我尝试使用 C++ 模板生成算术级数时,我发现它存在一些问题。 下面是一个