问题标签 [uniform-initialization]
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.
c++ - C++11 统一初始化和函数重载
简单的程序:
为什么叫叮当f((const char*)nullptr)
?我已经预料到编译器会发出关于模糊调用的警告。
c++ - C ++:使用花括号来防止分配期间变窄
我熟悉使用花括号/初始化器列表来防止在初始化变量时变窄,但是在为变量赋值时使用它也是一种好习惯吗?
例如
是否有理由不使用花括号进行赋值?
c++ - c++11 统一初始化不适用于“g++ -std=c++0x”
我有一个声明这个公共方法的类:
它使用统一初始化(这里只是{}
),这是 c++11 的一个特性。编译时这不会给我带来任何问题clang++ -std=c++11
。但是当我使用时,g++ -std=c++0x
我得到了这个:
该选项不是-std=c++0x
应该为我带来 c++11 支持吗?
使用标准 c++ 声明方法时,编译器不会给我任何错误,如下所示:
我在 Ubuntu 12.04 上使用 g++ 4.6
c++ - 转发参数时应该使用 () 还是 {}?
我有以下课程:
我想像这样向它转发参数:
如果我替换{}
为()
输出1 1 2
而不是2 1 1
.
哪个对我的班级最有意义?
c++ - 为什么 std::initializer_list 不存在 std::make_unique 等重载?
请参阅转发参数时应该使用 () 还是 {}?. foo
是一个std::vector
克隆。
在 N4140 中,unique.ptr.create std::make_unique
被指定为:
template <class T, class... Args> unique_ptr<T> make_unique(Args&&... args);
备注
T
:除非不是数组,否则此函数不应参与重载决议。回报:
unique_ptr<T>(new T(std::forward<Args>(args)...))
。
这意味着实现需要使用()
而不是{}
初始化对象。例如,以下
输出312
而 if {}
(inside std::make_unique
) 被使用211
将被输出。因为初始化器列表无法推导出来,所以std::initializer_list
必须显式传递才能得到后者的结果。问题是,为什么不提供这样的重载?
输出211
。
我不认为“您可以自己编写”或“避免使标准臃肿”的原因是很好的理由。提供这种过载有什么缺点吗?
c++ - std::move 上发生不需要的转换
为什么编译器认为我正在尝试将以下代码中Container
的类型对象转换为类型对象?MoveTest
为什么将大括号构造函数转发给move_things
变量?替换{}
为()
当然可以解决问题
我得到的错误如下
这是否意味着统一初始化语法不再是任何带有std::array
?
我使用的编译器和版本是
c++ - 具有 std::array 对象的类,没有默认构造函数
所以让我们假设我有以下课程
我有另一个类,它有一个类型数组NoDefaultConstructor
和其他成员
如何在构造函数中初始化数组Wrapper
(可能在初始化列表中使用std::intializer_list
)?
更具体地说,我可以将参数传递给初始化器列表中的数组构造函数Wrapper
以获得类似于以下的构造的唯一方法是什么?我正在考虑这样做,因为数组的大小将来可能会改变。
c++ - C++ - 带有 std::string 的统一初始化器
我正在尝试使用 C++ 字符串类的统一初始化程序。下面是代码:
输出将是:
这让我摸不着头脑。为什么str2
不能达到预期的效果str3
?
c++ - 使用可变参数模板进行统一初始化
我有一个 POD ChParam
,它是可变参数模板函数中的一个参数set
。我想在花括号中传递给函数参数(构造函数参数)p.set({ Param::D, 1000.f }, { Param::p, 2000.f })
。并认为将隐式调用构造函数并ChParam
创建对象。但这是不可能的,我应该明确地创建一个对象a.set(ChParam{ Param::D, 1000.f }, ChParam{ Param::p, 2000.f });
是否有可能以某种方式使用该变体p.set({ Param::D, 1000.f }, { Param::p, 2000.f })
?