gpt4 book ai didi

c++ - "using"类作用域的类型别名 : [when] can usages in methods PRECEDE the type alias?

转载 作者:行者123 更新时间:2023-12-02 03:40:30 26 4
gpt4 key购买 nike

昨天,当我能够编译具有使用 using type alias 的方法的代码时,我感到(愉快地)惊讶。即使别名的声明直到稍后才在类定义中进行。

  • 这种类型别名的“前向”用法有效吗? (我认为是这样,因为 Clang 5 和 GCC 4.9 都是这样工作的。)
  • 哪些规则涵盖了这种行为以及方法主体和方法签名用法之间的差异?

情况 #1 - 使用在方法后声明的方法,在方法体内有效(仅?)

#include <string>
#include <iostream>

struct X {
std::string create() { // fails to compile if Y used in signature
return Y{"hello!"}; // compiles when Y here
}

using Y = std::string; // declared at bottom
};

int main()
{
std::cout << X().create() << std::endl;
}

情况 #2 - 使用上面声明的方法[也]在签名中有效

#include <string>
#include <iostream>

struct X {
using Y = std::string; // declared at top

Y create() { // can use Y here as well
return Y{"hello!"};
}
};

int main()
{
std::cout << X().create() << std::endl;
}

最佳答案

这与complete-class context有关。当您位于成员函数体内时,该类被认为是完整的,并且可以使用类中定义的任何内容,无论它是在类中的何处声明的。

成员函数的返回类型不是完整类上下文的一部分,因此您只能使用代码中此时已知的名称。

关于c++ - "using"类作用域的类型别名 : [when] can usages in methods PRECEDE the type alias?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155508/

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