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

时间:2014-03-13 16:24:02

标签: c++ c++14 scoping

在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的返回值的类型?

1 个答案:

答案 0 :(得分:5)

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

那又怎样?你为什么关心这个类型的“真实”名字是什么?

正如dyp在评论中所说,你可以使用typedef为它命名,如果这让你感觉比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`
  }
}