gpt4 book ai didi

c++ - 尾随返回类型的名称查找和类型简化规则是什么?

转载 作者:行者123 更新时间:2023-12-02 07:41:42 25 4
gpt4 key购买 nike

尾随返回类型可以简化这两种情况下的代码:

  1. 从类的成员函数之一返回类内部定义的类型:

    struct X
    {
    using foo = int;
    foo f();
    };

    // pre-C++11
    X::foo X::f() { /* ... */ }

    // trailing, doesn't require `X::` before `foo`
    auto X::f() -> foo { /* ... */ }
  2. 返回复杂类型,例如函数指针类型:

    // pre-C++11
    int(*g(float))(int) { /* ... */ }

    // trailing, easier to read
    auto f(float) -> int(*)(int) { /* ... */ }

我试图找到标准的相关部分来解释上述两种简化是如何工作的。我查看了 [basic.lookup] 并查找了 trailing-return,但找不到任何简单的内容来解释上述转换的工作原理。

我错过了吗?

标准的哪些部分解释了上述尾随返回类型简化?

最佳答案

IMO,您这里有两个不相关的问题,我将尝试回答第一个问题。
它由 [basic.scope.class]/1.5 覆盖。 :

The potential scope of a declaration that extends to or past the end of a class definition also extends to the regions defined by its member definitions, even if the members are defined lexically outside the class (this includes static data member definitions, nested class definitions, member function definitions (including the member function body and any portion of the declarator part of such definitions which follows the declarator-id, including a parameter-declaration-clause and any default arguments ([dcl.fct.default]).

在成员函数的类外定义中

auto X::f() -> foo { /* ... */ }

trailing-return-type 位于 declarator-id X::f 之后,因此它是该类的潜在作用域成员,因此当提及 foo 时,非限定查找会找到 X::foo

关于c++ - 尾随返回类型的名称查找和类型简化规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com