所有类型的零值

zero value for all types?

本文关键字:类型      更新时间:2023-10-16

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

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

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

这将适用于所有基元类型、指针和具有默认构造函数赋值运算符的类型(默认情况下,所有类都将具有这些运算符,除非被告知不要这样做,或者它们被设置为受保护/私有)。

x = {};T t = {};/T t {}的自然赋值对应物,它本身就是获得初始化变量的自然方式。

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

你将不得不做一些类似的事情 ZeroMemory .

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

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

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