繁体   English   中英

这是构造函数运算符还是转换运算符?

[英]Is this a constructor operator or conversion operator?

class B
{
    public:
        operator B() const{ }    // What is this and what is the purpose?

    private:
        int m_i;
};

所以问题是,转换运算符或构造函数运算符是什么用的呢? 在哪里使用它?

它是一个永远不会被隐式调用的转换函数。 该标准实际上深入探讨了这个问题。 12.3.2 / 1:

转换函数从不用于将(可能是cv限定的)对象转换为(可能是cv限定的)相同的对象类型(或对它的引用),转换为该类型的(可能是cv限定的)基类(或引用它)或(可能是cv-qualified)void。

在脚注中,

这些转换被视为标准转换,用于重载解析(13.3.3.1,13.3.3.1.4),因此初始化(8.5)和显式转换(5.2.9)。 转换为void不会调用任何转换函数(5.2.9)。 即使从未直接调用执行转换, 也可以声明此类转换函数,并且可以通过调用基类中的虚拟转换函数来实现。

此外,转换函数仍然是正常函数,可以通过名称显式调用。

关于虚函数的注释适用于这样的代码:

class B;

struct A {
    virtual operator B() const = 0;
};

struct B : A
{
    public:
        operator B() const{ return B(); } // virtual override

    private:
        int m_i;
};

A const & q = B(); // q has dynamic type B, static type A
B r = q; // Convert A to B using B::operator B()

迂腐:“转换运算符”是一个很差的术语。 这些被称为转换函数 ,尽管有operator关键字,但它们不被认为是运算符重载的情况。

它是一个转换运算符。 它可以让你投类型的对象B到类型的对象B

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM