引用在函数作用域内定义的类

Referring to a class defined inside a function scope

本文关键字:定义 作用域 函数 引用      更新时间:2023-10-16

在c++ 1y中,函数的返回类型可能包含局部定义的类型:

auto foo(void) {
  class C {};
  return C();
}

类名C不在foo的作用域之外,因此您可以创建类实例,但不指定它们的类型:

auto x            = foo(); // Type not given explicitly
decltype(foo()) y = foo(); // Provides no more information than 'auto'

有时需要显式指定类型。也就是说,写"在foo中定义的C类型"而不是"foo返回的任何类型"是有用的。是否有一种方法来明确地写foo的返回值的类型?

auto x            = foo(); // Type not given explicitly
decltype(foo()) y = foo(); // Provides no more information than 'auto'

那又怎样?你为什么要关心这类人的"真实"名字?

正如dyp在评论中所说,如果您觉得比auto更好,可以使用类型定义为其命名:

 using foo_C = decltype(foo());

有时需要显式指定类型。也就是说,写"在foo中定义的C类型"而不是"foo返回的任何类型"是有用的。是否有一种方法来明确地写foo的返回值的类型?

foo()内部的函数作用域没有名称,就像这些作用域没有名称一样:

void bar()
{
  int i=0;
  // this scope does not have a name, cannot qualify `i`
  {
    int i=1;
    // this scope does not have a name, cannot qualify either `i`
  }
}