在 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 ?
}
在 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 {}
,它本身就是获取初始化变量的自然方式。
将一个类初始化为零= 0;
对于某些类可能没有意义,除非它们已经定义了=
运算符。
如果您只调用指针和简单类型,它可以工作(只会T
是:int
、、、、double
)。myClass*
myClassB*
您的标准在经典 C++ 中是不可能的。没有一个答案会完全奏效。因为TYPE t()
和TYPE t {}
都调用默认构造函数。因此,如果没有默认构造函数,则会出现编译失败。
你将不得不做类似的事情ZeroMemory
。
但请记住,默认构造函数无论如何都是在运行时运行的。