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明确写出返回值的类型?
Run Code Online (Sandbox Code Playgroud)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());
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)