initializer-list 相关问题

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 是右值表达式,移动构造函数将通过重载决议选择并在复制初始化期间调用。 这仍然被认为是复制初始化;这种情况没有特殊术语(例如,移动初始化)。

回答 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

自定义聚合初始化器列表构造函数

例如,nlohmann json有一种将集合初始化列表转换为JSON对象的方法:json j = { {"pi", 3.141}, {"happy", true}, {"name", "Niels"}, {"nothing", nullptr}, {" ...

回答 1 投票 1

在构造函数初始化列表中初始化函数指针数组--错误。

我正试图实现一个简单的菜单类,以便在编程AVR板时灵活使用。因此,我不能使用几个常用的STL文件(如functional或initializer_list等)。我的菜单...

回答 1 投票 0

如何在C++中通过函数参数传递固定大小的初始化列表的初始化列表?

我正在做一个矩阵类,我希望用户能够像这样实例化矩阵。矩阵 mat = { 10, 20 }, { 30, 40 }. }; 我的Matrix类是这样定义的:模板&...。

回答 2 投票 0

std::initializer_list可以专用吗?

在翻阅各种关于list-initialization的规则时,我在dcl.init.list#3.6中发现了这句话。否则,如果T是std :: initializer_list的特殊化。 ,对象的构造...

回答 1 投票 0

如何测试一个以编译时已知长度的std::initializer_list的ctor?

为了测试,我想用一个简单的std::initializer_list调用一个构造函数。假设值并不重要,长度、值和类型在编译时是已知的,比如{ 42, 42, 42, .... N-...

回答 1 投票 0

将intializer列表聚合inialization转发给std::array成员。

我有一个类,封装了一个stl兼容的容器类型,这是唯一的类成员,并给出了很多向量数学函数,可以应用在这个向量上。这个类有各种 ...

回答 1 投票 1

读取初始化列表的构造函数

我明白用大括号统一初始化背后的想法。但是,为什么在有一个构造函数取初始化器列表的类型上使用这种语法,调用那个特定的构造函数,甚至是 ...

回答 1 投票 1

如何使用大括号{}初始化一个类的对象?

我想让这段代码在编译时不出错(并且不使用std::initializer_list)这里的代码:模板 class Vector { public: T* Arr; int Size = 0; ...

回答 1 投票 0

C ++:在constexpr构造函数中初始化成员数组

我正在c ++ 17中实现一个类,该类需要能够在编译时使用constexpr构造函数构造一个对象。该对象有一个数组成员,我似乎无法...

回答 1 投票 1

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