5

在 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

4 回答 4

10

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

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

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

于 2012-08-10T12:56:08.587 回答
2

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

于 2012-08-10T18:31:54.810 回答
0

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

如果您只调用指针和简单类型,它可以工作(只会T是:int、、、、double)。myClass*myClassB*

于 2012-08-10T12:51:04.233 回答
0

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

你将不得不做类似的事情ZeroMemory

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

于 2019-03-13T04:00:10.470 回答