首页 > TAG信息列表 > initializer-list

c-变量的初始化列表

是否可以创建变量的initializer_list,例如函数参数(例如,功能测试)? 下面的代码有效,并且Clang和GCC都没有抱怨任何事情,但是我只想确保这是可以的. #include <iostream> #include <initializer_list> template <class T> struct array { T *ptr; size_t len; array(

c-来自initializer_list的构造方法

我正在用c实现容器,实际上是数组的包装器.我不确定如何从initializer_list实现构造函数.我最终完成了该实现,但在我看来确实很丑陋.因此,可能是在由initializer_list初始化的堆中分配的数组.还是有一种优雅的方法? template <typename T> class sequence { public: sequence (s

c-保留std :: initializer_list的副本是否安全?理由是什么?

在我的环境中,std :: initializer_list被实现为指向第一个元素和大小的指针.仍然在我的特定设置中,我能够观察到: >基础数据分配在当前功能框架中(因为指向第一个元素的指针如此) >从函数中按值返回initializer_list不会更改指针的值(导致得出的结论是,数据不会与initializer_list一

c initializer_list和shared_ptr行为

参见英文答案 > Double delete in initializer_list vs 2013                                    1个 我正在测试vs2013 c initializer_list. 可以编译下面的代码.但是当我运行exe时崩溃了. #include <memory> #include <iostream> class B

c – 为什么在std :: vector的初始化列表中调用复制构造函数?

我有以下非常简单的课程: class Foo { public: Foo() {} Foo(const Foo&) = delete; Foo(Foo&&) {} void operator=(const Foo&) = delete; void operator=(Foo&&) {} void dump() const {} }; 该类是可构造和可分配的,但不是可复制的可分配的. 我想使用vector的初

c – 为什么使用支撑初始化列表时首选std :: initializer_list构造函数?

考虑一下代码 #include <iostream> class Foo { int val_; public: Foo(std::initializer_list<Foo> il) { std::cout << "initializer_list ctor" << std::endl; } /* explicit */ Foo(int val): val_(val) {

c – 为什么在初始化列表可用时使用可变参数?

我一直想知道可变参数比初始化列表有什么优点.两者都提供相同的能力 – 将无限数量的参数传递给函数. 我个人认为初始化列表更优雅一些.语法不那么尴尬. 此外,随着参数数量的增加,初始化程序列表似乎具有明显更好的性能. 那么我还缺少什么,除了在C中使用变量参数的可能性之外呢?解决

c – 模板并不总是猜测初始化列表类型

#include <initializer_list> #include <utility> void foo(std::initializer_list<std::pair<int,int>>) {} template <class T> void bar(T) {} int main() { foo({{0,1}}); //This works foo({{0,1},{1,2}}); //This works

在std :: initializer_list中的c – std :: shared_ptr似乎过早被破坏了

编辑:这确实是由Visual Studio中的错误引起的 – 它已经被修复.将Update 2应用于Visual Studio(release candidate available here)后,该问题无法重现.我道歉;我以为我和我的补丁达成了约会. 我不能为我的生活找出当我在Visual Studio 2013中运行以下代码时出现seg错误的原因: #incl

c – 为什么不能使用initializer_list来初始化unique_ptr的向量?

参见英文答案 > initializer_list and move semantics                                    6个 我想知道为什么initializer_list不能与unique_ptr一起使用: std::vector<std::unique_ptr<int>> vptr = {std::make_unique<int>(1), std::make_

c – 对非对象使用成员初始化列表是不是很糟糕?

由于我只是在某些情况下必须使用初始化列表,因此我习惯于将所有内容放在初始化列表中,而构造函数只能用于设置成员的值. 就像我在这里做的: template <typename generic> class setsPool { protected: set<generic> *pool; size_t maxSets; generic maximumValue,

c – List-initializer和variadic构造函数

从CPP reference开始列表初始化: Otherwise, the constructors of T are considered, in two phases: All constructors that take std::initializer_list as the only argument, or as the first argument if the remaining arguments have default values, are examined, and

在C中组合前缀和*操作

在How to pass an initializer list as a function argument?的答案中,我看到了表达式: return WaitForMultipleObjects( handles.size(), &*handles.begin(), wait_all, time ); & *有什么意义?没有它,电话会有相同的含义吗?解决方法:>通常,container.begin()返回一个迭代器 >

c – 如何重载空std :: initializer_list?

这里我有一系列重载函数,它们都是vector或initializer_list的输入.我想在客户端代码输入空的initializer_list时处理特殊情况.问题是编译器无法确定这种空列表中的数据.所以我的问题是我如何在函数声明中解决这种情况. #include <string> #include <vector> using namespace std;

c – 使用初始化列表分配字符串

>你能解释一下,为什么会有差异? > PKcE是什么意思? 码: #include <iostream> #include <typeinfo> using namespace std; int main() { string s {"IDE"}; std::cout<<typeid(s).name()<<std::endl; auto S{"IDE"}; // w

c – DRY方法构造具有相同初始化列表的数组的所有元素?

在C 11中,是否有一种DRY方法来构造一个数组的所有元素,并为所有元素提供一组相同的参数? (例如通过单个初始化列表?) 例如: class C { public: C() : C(0) {} C(int x) : m_x{x} {} int m_x; }; // This would construct just the first object with a parameter of 1. //

c – 如何使用2维initializer_list进行初始化?

我知道,矢量类是按以下方式初始化的: Vector::Vector(initializer_list<double> lst) :size{static_cast<int>(lst.size())},elem{new double[static_cast<int>(lst.size())]} { copy(lst.begin(),lst.end(),elem); } 这是我的Matrix类: class Matrix{ pr

c – 根据模板参数生成不同大小的初始化列表

我有一个包含没有默认构造函数的对象数组T的类.这是一个例子: #include <iostream> struct Param { int x; }; struct A { A(const Param &p) { std::cout << p.x << std::endl; } }; template<class T, int n> struct Array { T data[n];

c – 这部分功能模板是否专业化?

在回答了this question之后我想出了这个 我有一个简单的功能模板(C 11): template<class elem_t, class list_t> bool in_list(const elem_t& elem, const list_t& list) { for (const auto& i : list) { if (elem == i) { return true; } } return

如何在C 11中创建自己的initializer_list类?

我使用支持统一初始化的VS2013创建了一个具有相同std :: initializer_list实现的类. template <class _Elem> class My_Initializer_List { ... } // Hope to replace std::initializer_list! 我注意到的第一件事是编译器一直在寻找std :: initializer_list,当它有替代它时,它是M

c – std :: initalizer_list可以导致生命周期问题吗?

使用std :: initializer_list时遇到了一些困难.没过多久就意识到我更多地将它想象成一个容器,实际上它具有引用语义.所以我的问题是,以下哪个例子可能会导致问题,如果没有,为什么它们会起作用? 我应该补充说我正在使用VS2013并且std :: initializer_list仅使用开始和结束指针实现.

c – std ::绑定到lambda:编译错误

我试图std ::绑定到lambda时遇到错误.以下代码示例编译正常: #include <functional> #include <iostream> int main() { const auto lambda1 = [](int a, int b){ return a + b; }; std::cout << (std::bind( lambda1, std::placeholders::_1, 2))(2) &

c – 使用自定义类型的初始化列表重载>>运算符和初始化

我一直在尝试制作一个非常简单的地图容器,我认为能够像这样初始化它会很好: Hash table = { "name1" >> value, "name2" >> value2, "name3" >> value3, "name4" >> value4 }; 我将如何解决这个问题

c – 嵌套的std :: initializer_lists的数据元素是否保证是连续的?

可以通过嵌套括号括起来的列表来创建多维初始值设定项,如{{1,2,3},{4,5,6}}.接受此功能的函数可以使用嵌套的std :: initializer_lists编写. 数据元素是否保证是连续的? 这是一个例子: void f(std::initializer_list<std::initializer_list<int>> a) { for(auto const & p: a)

c – 总是用{}初始化对象是好习惯吗?

使用新的{}语法初始化对象,如下所示: int a { 123 }; 有益 – 您不会声明函数而不是错误地创建变量.我甚至听说应该习惯这样做.但看看会发生什么: // I want to create vector with 5 ones in it: std::vector<int> vi{ 5, 1 }; // ups we have vector with 5 and 1. 这是一个好