当前位置:  开发笔记 > 编程语言 > 正文

为什么构造函数优先于用户定义的运算符?

如何解决《为什么构造函数优先于用户定义的运算符?》经验,为你挑选了1个好方法。

我正在尝试理解static_cast.我有两个课程FromTo.我正在尝试将From转换为To.我有一个构造函数的是需要.我还有一个用户定义的转换运算符,用于将From对象转换为To.为什么构造函数优先于赋值运算符?

class From;
class To
{
public:
    int y;
    To() { cout << "In To default constructor" << endl; }
    To(const To& sl2) { cout << "In To copy constructor" << endl; }
    void operator=(const To& sl2) { cout << "In To assignment operator" << endl; }
    ~To() { cout << "In To destructor" << endl; }
    To(const From& sl1) { cout << "In From-To constructor" << endl;}
};

class From
{
public:
    int x;
    From() { cout << "In From default constructor" << endl; }
    From(const From& sl2) { cout << "In From copy constructor" << endl; }
    void operator=(const From& sl2) { cout << "In From assignment operator" << endl; }
    ~From() { cout << "In From destructor" << endl; }
    operator To() const { cout << "Converting From to To" << endl; return To(); } 
};

int _tmain(int argc, _TCHAR* argv[])
{
    From from;
    To to;
    to = static_cast(from);
}

TartanLlama.. 5

"因为标准是这么说的"对你来说是一个有效的答案吗?

static_cast(e)T t(e);t演员的结果具有相同的效果.这遵循直接初始化的规则,该规则在考虑用户定义的转换序列之前通过重载解析来考虑适用的构造函数.

如果能让您放心,我可以提供相关的标准报价.



1> TartanLlama..:

"因为标准是这么说的"对你来说是一个有效的答案吗?

static_cast(e)T t(e);t演员的结果具有相同的效果.这遵循直接初始化的规则,该规则在考虑用户定义的转换序列之前通过重载解析来考虑适用的构造函数.

如果能让您放心,我可以提供相关的标准报价.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有