12

这个程序导致了一个不受欢迎的解析贪婪死胡同:

struct float4x4 {};
class C
{
    float4x4 M();
};

float4x4 ::C::M()
{
    return float4x4{};
}

:8:1: 错误:“float4x4”中没有名为“C”的成员;你的意思是简单的'C'吗?
float4x4 ::C::M()
^~~~~~~~~~~~

可以使用尾随返回类型“修复”:

auto ::C::M() -> float4x4
{}

现在一切都好。

所以我认为我们不能在使用标题返回类型声明符语法时完全限定类名?

4

1 回答 1

10

您可以使用括号来消除歧义:

float4x4 (::C::M)()
{
    return float4x4{};
}

我不能真正告诉你是什么规则使它正常,虽然它不是没有括号,尽管我用 gcc 和 clang(两者-pedantic)进行了测试。我更喜欢尾随返回类型。

于 2019-11-18T11:20:55.793 回答