微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用赋值运算符而不是隐式构造函数

如何解决使用赋值运算符而不是隐式构造函数

在我的程序中,我尝试使用分配 operator= 来分配我的类的对象。我特别想调用赋值运算符而不是隐式构造函数(因此是 explicit 关键字)。当我尝试编译时,我得到一个 C2440 Compiler Error:

class MyClass {
public:
    explicit MyClass(double x = 0.) :
        m_x(x) {
    }

    MyClass& operator = (const double& other) {
        m_x = other;

        /* do something special here */

        return *this;
    }
private:
    double m_x;
};

int main()
{
    MyClass my_class = 2.; // C2440

    return 0;
}

我猜编译器在尝试隐式调用构造函数时失败(因为 explicit)。有人解决了吗?

解决方法

MyClass my_class = 2.; 或多或少等价于 MyClass my_class(2.);,但是,您将构造函数标记为 explicit,这会阻止 C++ 自动执行此操作。

因此,按照您编写代码的方式,您无法真正做您想做的事。您可以使用以下方法显式调用构造函数:

MyClass my_class(2.); // Explcitly call your constructor

或者,正如 Ted Lyngmo 在评论中提到的,你可以这样做:

MyClass my_class; // Call your constructor with default argument of 0
my_class = 2.; // then call your assignment operator

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。