在C ++ 11中,有没有办法将算术类和类类型的值初始化为零(算术类型的运行时绝对没有开销)?
template<typename T> void myFunction(T& x)
{
x = 0; // How to make this works for T = double but also for T = std::string ?
}
答案 0 :(得分:9)
您可以使用默认构造函数“清除”变量:
template<class T>
void clear(T &v)
{
v = T();
}
这适用于所有基本类型,指针和类型,它们具有默认构造函数和赋值运算符(默认情况下所有类都将具有,除非被告知,或者它们被保护/私有的)。
答案 1 :(得分:2)
x = {};
是T t = {};
/ T t {}
的自然分配对象,它本身就是获取初始化变量的自然方式。
答案 2 :(得分:0)
使用= 0;
将类初始化为零可能对某些类没有意义,除非他们已经定义了=
运算符。
如果您只调用指针和简单类型,它可以工作(T
只能是:int
,double
,myClass*
,myClassB*
)
答案 3 :(得分:0)
您的标准在经典C ++中是不可能的。没有答案将完全起作用。由于TYPE t()
和TYPE t {}
都调用默认构造函数。因此,如果没有默认构造函数,则将导致编译失败。
您将必须执行类似ZeroMemory
的操作。
但是请记住,默认构造函数无论如何都在运行时运行。