initializer-list 相关问题

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

初始化列表作为运算符[]的参数

这个问题与这里讨论的问题相关。 我尝试使用初始值设定项列表来创建要传递给运算符[] 的参数。 #包括 #包括 结构体A { ...

回答 2 投票 0

如何制作一个构造函数,让我可以使用花括号初始化列表进行构造?

我的 Phenotype 类具有以下构造函数: 表型(uint8 init[NUM_ITEMS]); 我可以创建这样的表型: uint8 数据[] = {0,0,0,0,0}; 表型 p(数据); 但我收到一个错误...

回答 3 投票 0

如何制作一个构造函数,让我可以使用花括号初始化列表进行构造?

我的 Phenotype 类具有以下构造函数: 表型(uint8 init[NUM_ITEMS]); 我可以创建这样的表型: uint8 数据[] = {0,0,0,0,0}; 表型 p(数据); 但我收到一个错误...

回答 3 投票 0

在 Visual C++ 编译器中使用 std::initializer_list 2012 年 11 月 CTP

我想像本例中的人一样在 Visual Studio 2012 中使用 std::initializer_lists 。我的操作系统是 Windows 8 x64。 因此我最近在 2012 年 11 月安装了 Visual C++ 编译器...

回答 2 投票 0

C++:尽管有显式构造函数,花括号仍初始化

我有一个数据类(就像C意义上的结构:一个只有一堆属性的类),我用它来初始化(我认为是通过隐式复制构造函数)用大括号初始化。 .

回答 2 投票 0

如果类具有带有虚方法的基类c ++,则使用initializer_list初始化类实例

如果类具有带有虚方法c ++的基类,如何使用initializer_list初始化类实例?我想避免编写构造函数并使用“惰性”方式来初始化类,例如 X x{"

回答 1 投票 0

我可以保留 std::initializer_list<T>::begin() 返回的地址吗?

我有一些数据类的静态实例,它们保存在整数数组上,简化如下: 类 ReadableIds { 民众: 常量 int * ids; ReadableIds( const int * _ids ...

回答 1 投票 0

在避免钻石问题时我错过了什么?

这是我的继承结构的最小可重现示例: #包括 A类{ 受保护: 诠释 x; 民众: A() : x(5) { } A(int a) : x(a) { } 得到……

回答 1 投票 0

错误:‘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 }; } 虽然看起来不整洁。

回答 2 投票 0

从不可复制类型创建 std::initializer_list

我的印象是,由于 std::initializer_list 将通过将 T 复制到存储中进行初始化,所以这是行不通的: 结构 t{}; std::initializer_list 我的印象是,由于 std::initializer_list<T> 将通过将 T 复制到存储中进行初始化,所以这是行不通的: struct t{}; std::initializer_list<std::unique_ptr<t>> l{std::make_unique<t>(), std::make_unique<t>()}; 但它确实有效,上面的initializer_list<std::unique_ptr<t>>可以用std::unique_ptr<t>初始化,它本身删除了它的复制构造函数。 上面的语法怎么可能,而用类似的std::vector<std::unique_ptr<t>>初始化std::initializer_list<>会失败? 我认为您的误解在于这句话,“将通过将 T 复制到存储中进行初始化”。严格来说,这不一定是真的。 虽然 std:initializer_list 的每个元素都是 copy-initialized§,但这并不一定意味着它实际上被复制了。也就是说,类型 T 实际上并不需要 copy 构造函数,因为 move 构造函数 如果可用(就像 std::unique_ptr<T> 一样)将被使用,而复制构造函数则不是。另请注意,当 std::initializer_list 被复制时,其基础元素是 not 复制。 §来自链接的cppreference页面: 如果other 是右值表达式,移动构造函数将通过重载决议选择并在复制初始化期间调用。 这仍然被认为是复制初始化;这种情况没有特殊术语(例如,移动初始化)。

回答 1 投票 0

如何在 C++03 中从初始化列表中初始化数组成员?

以下在 C++11 中工作正常,但在 C++03 中不起作用。 结构 Foo { 诠释一个,乙; Foo(int a, int b) : a(a), b(b) {} }; 结构栏 { 噗噗[2]; 酒吧() : foos{ {1,2}, {2,...

回答 0 投票 0

为什么这段代码会为不同的编译器生成不同的输出?

我有以下代码: #包括 #包括 结构 C { 诠释; C() : a(0) {} C(int a) : a(a) {} }; std::ostream &运算符<<(std::ostream &os, ...

回答 1 投票 0

C++20 错误:<function-style-cast> 无法将初始化列表转换为 std::string

我正在使用 C++20 并尝试使用初始化列表来初始化 std::string 变量。但是,我收到以下错误消息: Error C2440 “&qu...

回答 0 投票 0

无法从 initializer_list 移动的解决方法?

方便的 initializer_list 语法似乎以无法移动列表成员为代价,创建了不必要的副本。 结构A { // 一些成员是动态资源...

回答 1 投票 0

关于std::initializer_list的语法问题:std::initializer_list<int>{(foo<T>,0)...}

我正在阅读下面关于处理任意形式函数的代码,并对 initializer_list{((get_arg(ds, t)), 0)...} 中的语法感到困惑

回答 0 投票 0

初始化列表与向量

在 C++11 中,可以使用初始化列表来初始化函数中的参数。它的目的是什么?不能用 const 向量做同样的事情吗?下面两个程序有什么区别?

回答 5 投票 0

库中的 C++ 类初始化列表导致堆栈损坏

我已经将我的问题提炼为一个(希望如此)非常简单的例子。在高层次上,我有一个提供类实现的共享库,以及一个使用该库的主要可执行文件。在...

回答 2 投票 0

How to implement initializer_list constructor for a wrapper of std::map

这是 std::map 的简单包装类。我希望能够使用初始化列表来构造 Wrapper 类型的对象(请参阅 main 函数),但是此实现不起作用。 #inclu...

回答 1 投票 0

union可以在initializer-list中初始化吗?以及如何?

联合值{ 诠释我; 布尔j; }; 类 Json { 民众: Json(int i): m_value.i(i) {};//错误 m_value.i = i; //正确的 私人的: 值m_value; }; 工会可以吗

回答 2 投票 0

当一个shared_ptr<string>没有使用初始化器列表初始化时,编译错误。

在下面的代码中,pName_被初始化在一个构造函数的主体中,在编译过程中会产生错误:错误:没有匹配的调用'(std::shared_ptr >) (std::string)'* pName_(new ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.