在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
的返回值的类型?
返回类型推演(希望) C++ 14,但不是C++ 11。 (在C++ 11中,它支持lambda表达式,但只有在主体是一个'return'语句,所以你也不能在那里定义一个本地类型)。 –
在块范围声明的名称通常没有链接(3.5/8)。这意味着,根据定义,这些名称所指的实体不能在该范围之外命名。 –
@MikeSeymour谢谢,没有意识到它不是C++ 11的一部分。我将C++ 11更改为C++ 1y。 – Heatsink