【问题标题】:Why this C++ type deduction is allowed [duplicate]为什么允许这种 C++ 类型推导[重复]
【发布时间】:2018-07-03 14:37:14
【问题描述】:

我遇到了一些生产代码,这让我想知道为什么要编译它。 我将其提炼为以下内容。

我用 gcc 6.4.1 和 8.1 以及其他几个在线编译器编译它,它们都没有报告错误。

struct Y
{
};

struct X
{
    using XY = Y;
};

struct VZ
{
    virtual void f( X::X::XY xy ) = 0;
};

struct Z : public VZ
{
    virtual void f( X::XY xy ) override {}
};

int main( int c, char *v[] )
{
}

请注意,纯虚拟是用看起来不正确的类型 (X::X::XY) 声明的。多少个 X:: 我在类型前面加上,它仍然可以编译。

我怀疑这可能是一个简单的解析器问题,但不确定。

【问题讨论】:

    标签: c++ type-deduction


    【解决方案1】:

    这是预期行为,称为injected class nameX::X 指类名X,与X::X::X 相同,以此类推。 X::X::XY 与此处的 X::XY 相同。

    在类范围内,当前类的名称被视为公共成员名称;这称为注入类名。


    顺便说一句:这与type deduction无关;通常用作 C++ 的另一个术语。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多