所有类型的零值?

时间:2012-08-10 12:44:20

标签: c++ c++11 initialization zero

在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 ?
}

4 个答案:

答案 0 :(得分:9)

您可以使用默认构造函数“清除”变量:

template<class T>
void clear(T &v)
{
    v = T();
}

这适用于所有基本类型,指针和类型,它们具有默认构造函数赋值运算符(默认情况下所有类都将具有,除非被告知,或者它们被保护/私有的)。

答案 1 :(得分:2)

x = {};T t = {}; / T t {}的自然分配对象,它本身就是获取初始化变量的自然方式。

答案 2 :(得分:0)

使用= 0;将类初始化为零可能对某些类没有意义,除非他们已经定义了=运算符。

如果您只调用指针和简单类型,它可以工作(T只能是:intdoublemyClass*myClassB*

答案 3 :(得分:0)

您的标准在经典C ++中是不可能的。没有答案将完全起作用。由于TYPE t()TYPE t {}都调用默认构造函数。因此,如果没有默认构造函数,则将导致编译失败。

您将必须执行类似ZeroMemory的操作。

但是请记住,默认构造函数无论如何都在运行时运行。