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