使用C ++ 11,已经引入了统一初始化,我得到的印象是{}
现在对所有情况都是非常安全initialization(如果允许的话)。但我just noticed,我错了。
什么 是所有类型的安全初始化形式?具有已删除/私有默认c'tor或课程的Baring类。
以下是内置:
int u; // evil, x will be un-initialized
int v{}; // nice value-initialization, as far as I know.
int w={}; // nice value-initialization, right?
int x={0}; // proper initialization, not suited for other types though
int x=0; // proper initialization, also not suited
但是使用汇总,例如tm
#include <ctime>
tm birth1{}; // evil. nothing initialized.
tm birth4=tm(); // yes! nice value-initialization.
tm birth2 ={}; // evil. nothing initialized
tm birth3 ={0}; // evil, only first member init
但使用 C-arrays
int data1[9] ={}; // evil. nothing initialized.
int data1[9] ={0}; // proper (value?)-initialization of all elements
使用编译器生成的default-c'tor聚合以外的类是什么?
struct Widget {
std::string name;
int val;
};
Widget w1; // w1.val will be uninitialized
Widget w2{}; // w2.val will be uninitialized
Widget w3 = Widget{}; // ??? will w3.val be value-initialized?
Widget w4{0}; // an error, or course.
我忘了一个重要的人吗?
作为一个扩展的问题,我想知道是否有一个正确的/好的/任何方式来编写一个模板函数,为所有可以以这种方式初始化的类型返回一个正确初始化的对象:
template<typename T>
T init() {
return T{};
// or 'T t = T{}; return t;'
// or...
}