问题标签 [initializer-list]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
200 浏览

c++ - 使用“var{args}”初始化是 C++0x 的新特性,还是仅仅是语法糖?

我正在阅读C++0x 常见问题解答,并遇到了详细说明初始化程序列表的部分。这些示例主要是以下内容的变体:

但是,还列出了以下形式:

这种形式出现在常见问题解答的其他地方,我很好奇它是否在语义上与最初的两种形式不同,或者只是vk({x, y, z}).

0 投票
4 回答
4188 浏览

c++ - 使用 C++11 initializer_list 实现类似 std::array 的容器

唯一且 imo 非常不方便的警告std::array是,它不能像内置 C 数组那样从初始化列表中推断出它的大小,它的大小必须作为模板传递。

是否可以使用 initializer_list 实现类似 std::array 的容器(内置 C 数组的薄包装器)C++11

我问是因为,与 std::array 不同,它会自动从初始化列表中推断出数组的大小,这更方便。例如:

如果没有提供初始化列表,我们还想提供一个构造函数来指定大小。例如:

这也将使容器与其他标准容器(例如向量、双端队列和列表)更加一致。

据我所知,这是不可能的,因为包装的 C 数组,例如 T elems [size],必须具有恒定的大小,并且 initializer_list 的 size() 成员函数不是恒定的。

另外,我想知道是否可以使用可变参数模板来实现这样的容器,尽管从我读过的内容来看,我认为这是不可能的。

0 投票
2 回答
2078 浏览

c++ - 为什么大小不是 std::initializer_list 的模板参数?

std::initializer_list由编译器从大括号括起来的初始化列表中构造,并且该列表的大小必须是编译时常量。

那么为什么委员会决定从模板参数中省略大小呢?这可能会阻止一些优化并使某些事情变得不可能(std::array从 a初始化std::initializer_list)。

0 投票
4 回答
172 浏览

c++ - [c++]:构造函数中的初始化列表问题

我偶然发现了一个我以前从未想过的问题。这里是:每个对象(在初始化列表中列出)的“构造函数”都会被触发。

然后我得到如下输出:

根据输出,我认为“A a(b)”触发了 B 的复制构造函数。如果我猜对了,那就意味着 'A(B &b):_m(b)' 触发 B 的复制构造函数。为什么不是构造函数而是复制构造函数?

0 投票
4 回答
4261 浏览

c++ - Initializer-list-构造一个不可复制(但可移动)对象的向量

可以将push_back不可复制但可移动类型的右值转换为该类型的向量:

但是,当我尝试使用相同的右值初始化向量列表时,我收到有关需要复制构造函数的错误:

GCC 4.7 出现以下错误:

这应该被允许吗?我认为它没有被允许的技术障碍,但我目前手边没有标准......

0 投票
2 回答
430 浏览

c++ - 依赖于编译器特定代理的 C++11 库功能

通过反复试验引起了我的注意,有些 C++11 特性依赖于某种编译器魔法 (TM)。我一直在搞乱实现我自己的标准符合标准的stdlib。我知道有现成的标准库实现,但这个更多是我自己的小型应用程序的个人版本。

昨晚我std::initializer_list根据规范实现了,但我无法让它工作,我搜索了高和低的答案,只留下了不可能的声明,并且需要对编译器本身进行修改。好吧,我决定看看libstdc++它的当前实现,果然我的实现在设计上完全一样,只是边缘略有不同,我浪费了无意义的时间来弄清楚为什么实现不工作,当它完全正确时在设计上与中的相同libstdc++。直到六个小时后,我才意识到它必须在命名空间 std 中。原来实现是 merley 的编译器的代理,这使得这成为initializer_list可能,编译器本身initializer_listnamespace std.

我的问题是我应该知道是否还有其他库功能需要某种特殊的编译器魔法才能工作,是否需要更多隐藏的代理连接,或者为任何新的 C++11 库功能隐藏编译器本质?我想提前知道这些,这样我就可以为实现其他依赖于编译器魔法的功能做好准备,而不是浪费一整天的时间通过反复试验来解决它;这可能会变得乏味且相当烦人。

谢谢。

0 投票
2 回答
190 浏览

initialization - 如何使用统一初始化程序“减少键入以创建 C++ 类型”?

我玩了很多新的统一初始化{}像这样:

毫无疑问,这种初始化可能会改变我们对 C++ 的编程。但我想知道在Herb Sutter 常见问题解答中阅读Alfonses 的问题时是否错过了一些神奇的可能性

Alfonse:统一初始化(当可以推断出正在构造的类型时使用 {} 调用构造函数)有可能从根本上减少创建 C++ 类型所需的类型数量。就像 lambdas 一样,它会改变人们编写 C++ 代码的方式。[...]

有人可以给我一个例子来说明Alfonse在这里的设想吗?

0 投票
3 回答
20154 浏览

c++ - C++:我应该将分配给构造函数主体的指针成员初始化为NULL吗?

假设我有:

我应该在 MyClass 构造函数的构造函数初始化列表中将 something_ 初始化为 NULL(或 0)吗?或者这不是必需的,因为我在构造函数的主体中分配给它?推荐的做法是什么?

0 投票
4 回答
2949 浏览

c++ - 从构造函数初始化列表调用重载的构造函数

在下面的代码中,我的意图是根据传递给 class 对象的参数调用kap(class )的两个重载构造函数之一:opacitymaterial

然而,这不起作用:

我尝试的第一件事,

也失败了,因为由于编译时原因,“三元运算符的结果总是必须是相同的类型”,正如在类似问题中指出的那样(尽管似乎没有在那里解释)。

Matter现在,不优雅的解决方案是也基于构造函数应该接收的参数重载构造kap函数,但这是(1)非常不优雅,特别是因为Matter构造函数需要许多变量并执行许多操作(所以很多代码会是复制只是为了改变构造函数初始化列表的一部分),并且(2)如果有另一个使用的类也有不同的构造函数,kap这可能会失控:对于具有N个 c'tors的M个类,一个以N结尾^ M组合...Matter

有人会有建议或解决方法吗?提前致谢!

0 投票
2 回答
3792 浏览

c++ - Templates don't always guess initializer list types