允许类分配为零

Allow class to be assigned as zero

本文关键字:分配 许类      更新时间:2023-10-16

我正在编写一个模板函数,我想初始化一个模板变量为零。我在考虑设置等于零的变量,然后让类类型定义其自己的"零"的定义:

T data = 0;

我尝试超载分配运算符:

class Example{
public:
    int data;
    Example(){}
    Example& operator=(int v){
        data = v;
        return *this;
    }
};
template <class T> T test(){
    T data = 0;
    return data;
}
int main(int argc, char** argv){
    double v1 = test<double>();
    Example v2 = test<Example>();
    return 1;
}

...但是编译器给了我"错误:从'int'转换为非标准类型..."。我该如何完成这项工作?还是有更好的方法来做我想做的事?

您的代码问题是T data = 0;实际上调用构造函数,而不是operator=。因此,为了正常工作,您需要声明接受int的构造函数。

您应该注意使您的类可分配给0。您应该使用支撑初始化:

template <class T> T test(){
    T data{};
    return data;
}

它将正确构造任何默认构造类型,并将零初始化内置类型,例如doubleint