c++ - 允许将类分配为零

标签 c++ operator-overloading

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

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 的构造函数。

关于c++ - 允许将类分配为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40771842/

相关文章:

C++ DLL 导出 : Decorated/Mangled names

c++ - 多次调用 istream 上的 putback()

c++ - 如何解决 ISO C++ 中不明确的运算符

types - 递归实现特征 "Not"

c++ - 如何在 `operator==` 包装类中使用重载 `std::variant` 来比较 Setting Vs Setting 和 T vs T?

c++ - 处理具有多个输出参数的函数

c++ - 为什么我的函数不跳过尝试解析为不兼容的模板函数,而是默认解析为常规函数?

python - 如何在C++中展平颜色直方图?

c++ - 本例中圆括号“()”重载是什么意思

c++ - 运算符重载 ">>"错误