std :: initializer_list是C ++ 11中的一种特殊类型,用于从相同类型的值列表构造容器和其他类型。可以实现为一对指针或指针和长度,其存储可以是自动,临时或静态只读。
从不可复制类型创建 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 是右值表达式,移动构造函数将通过重载决议选择并在复制初始化期间调用。 这仍然被认为是复制初始化;这种情况没有特殊术语(例如,移动初始化)。
以下在 C++11 中工作正常,但在 C++03 中不起作用。 结构 Foo { 诠释一个,乙; Foo(int a, int b) : a(a), b(b) {} }; 结构栏 { 噗噗[2]; 酒吧() : foos{ {1,2}, {2,...
我有以下代码: #包括 #包括 结构 C { 诠释; C() : a(0) {} C(int a) : a(a) {} }; std::ostream &运算符<<(std::ostream &os, ...
C++20 错误:<function-style-cast> 无法将初始化列表转换为 std::string
我正在使用 C++20 并尝试使用初始化列表来初始化 std::string 变量。但是,我收到以下错误消息: Error C2440 “&qu...
方便的 initializer_list 语法似乎以无法移动列表成员为代价,创建了不必要的副本。 结构A { // 一些成员是动态资源...
关于std::initializer_list的语法问题:std::initializer_list<int>{(foo<T>,0)...}
我正在阅读下面关于处理任意形式函数的代码,并对 initializer_list{((get_arg(ds, t)), 0)...} 中的语法感到困惑
在 C++11 中,可以使用初始化列表来初始化函数中的参数。它的目的是什么?不能用 const 向量做同样的事情吗?下面两个程序有什么区别?
我已经将我的问题提炼为一个(希望如此)非常简单的例子。在高层次上,我有一个提供类实现的共享库,以及一个使用该库的主要可执行文件。在...
How to implement initializer_list constructor for a wrapper of std::map
这是 std::map 的简单包装类。我希望能够使用初始化列表来构造 Wrapper 类型的对象(请参阅 main 函数),但是此实现不起作用。 #inclu...
union可以在initializer-list中初始化吗?以及如何?
联合值{ 诠释我; 布尔j; }; 类 Json { 民众: Json(int i): m_value.i(i) {};//错误 m_value.i = i; //正确的 私人的: 值m_value; }; 工会可以吗
当一个shared_ptr<string>没有使用初始化器列表初始化时,编译错误。
在下面的代码中,pName_被初始化在一个构造函数的主体中,在编译过程中会产生错误:错误:没有匹配的调用'(std::shared_ptr >) (std::string)'* pName_(new ...
例如,nlohmann json有一种将集合初始化列表转换为JSON对象的方法:json j = { {"pi", 3.141}, {"happy", true}, {"name", "Niels"}, {"nothing", nullptr}, {" ...
我正试图实现一个简单的菜单类,以便在编程AVR板时灵活使用。因此,我不能使用几个常用的STL文件(如functional或initializer_list等)。我的菜单...
如何在C++中通过函数参数传递固定大小的初始化列表的初始化列表?
我正在做一个矩阵类,我希望用户能够像这样实例化矩阵。矩阵 mat = { 10, 20 }, { 30, 40 }. }; 我的Matrix类是这样定义的:模板&...。
在翻阅各种关于list-initialization的规则时,我在dcl.init.list#3.6中发现了这句话。否则,如果T是std :: initializer_list的特殊化。 ,对象的构造...
如何测试一个以编译时已知长度的std::initializer_list的ctor?
为了测试,我想用一个简单的std::initializer_list调用一个构造函数。假设值并不重要,长度、值和类型在编译时是已知的,比如{ 42, 42, 42, .... N-...
将intializer列表聚合inialization转发给std::array成员。
我有一个类,封装了一个stl兼容的容器类型,这是唯一的类成员,并给出了很多向量数学函数,可以应用在这个向量上。这个类有各种 ...
我明白用大括号统一初始化背后的想法。但是,为什么在有一个构造函数取初始化器列表的类型上使用这种语法,调用那个特定的构造函数,甚至是 ...
我想让这段代码在编译时不出错(并且不使用std::initializer_list)这里的代码:模板 class Vector { public: T* Arr; int Size = 0; ...
我正在c ++ 17中实现一个类,该类需要能够在编译时使用constexpr构造函数构造一个对象。该对象有一个数组成员,我似乎无法...