引用在函数范围内定义的类

Hea*_*ink 11 c++ scoping c++14

在C++ 1y中,函数的返回类型可能涉及本地定义的类型:

auto foo(void) {
  class C {};
  return C();
}
Run Code Online (Sandbox Code Playgroud)

类名C不在主体范围之外foo,因此您可以创建类实例但不指定其类型:

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

有时需要明确指定类型.也就是说,编写"在foo中定义的类型C"而不是"foo返回的任何类型"是很有用的.有没有办法foo明确写出返回值的类型?

Jon*_*ely 5

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

所以呢?你为什么关心这个类型的"真实"名字是什么?

正如dyp在评论中所说,你可以使用typedef为它命名,如果这让你感觉比auto以下更好:

 using foo_C = decltype(foo());
Run Code Online (Sandbox Code Playgroud)

有时需要明确指定类型.也就是说,编写"在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`
  }
}
Run Code Online (Sandbox Code Playgroud)