std::分配器中的直接初始化与统一初始化
Direct vs uniform initialization in std::allocator
这个问题也已经提交给了Usenet,在那里它更合适,但这是一个更大、更可靠的论坛
std::allocator::construct
被定义为转发其参数使用括号进行包到对象构造,也称为直接初始化。
如果它使用大括号,也就是统一初始化,我们就可以初始化从函数(如std::make_shared
和container::emplace
。此外,放置内容也是可以接受的将初始值设定项列表转换为这样的函数的参数列表,initializer_list
型演绎问题的求解转发。
是否考虑并拒绝了此备选方案?转换是否为时已晚在未来的标准中?这似乎是一个突破性的改变,但是不是特别令人发指的。
我不知道SC考虑了什么,但请记住,统一初始化在通用上下文中并不能真正"工作"(除非值构造*(。考虑一下这个尝试:
template<typename T, typename... Args>
T
make(Args&&... args)
{
return T { std::forward<Args>(args)... };
}
你得到:
assert( make<std::vector<int>>(10, 0).size() == 2 );
assert( std::vector<int>(10, 0).size() == 10 );
这不会编译:
make<std::vector<int*>>(10u, 0);
而这是:
std::vector<int*>(10u, 0);
如果导致这种情况的完美转发和初始值设定项列表之间的特定交互很快被正式化,我可以看到SC不想从头开始。
(*(:即使在一般上下文中,T {}
也可以。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 使用 std::分配器在 constexpr 中进行默认初始化
- 正在初始化:无法从'_Ty*'转换为 List<int,std::分配器<节点<T>>>:节点*
- 错误 C2440:"正在初始化":无法从"初始值设定项列表"转换为"std::vector<char *,std::分配器<_Ty>>
- C 使用分配器和初始化剂,并带有升压圆形缓冲液
- 没有用于初始化我的自定义分配器的匹配构造函数
- 应该分配器 construct() 默认初始化而不是值初始化
- std::分配器中的直接初始化与统一初始化
- 为什么在改变std::vector的分配器时初始化列表不可用?