引用在函数作用域内定义的类
Referring to a class defined inside a function scope
在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
的返回值的类型?
auto x = foo(); // Type not given explicitly decltype(foo()) y = foo(); // Provides no more information than 'auto'
那又怎样?你为什么要关心这类人的"真实"名字?
正如dyp在评论中所说,如果您觉得比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`
}
}
相关文章:
- 块作用域中的函数指针定义
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 为什么 for 循环不能定义两个作用域的变量?
- 作用域中的模板变量或模板类型定义
- 函数在作用域中定义,但编译器抱怨它超出了作用域
- 作用域中定义的变量与注入该作用域的命名空间变量
- 自定义条件作用域互斥锁
- 如何声明在函数作用域中定义的结构
- 在 FOR 循环之外定义的变量的作用域
- 我可以在函数作用域中使用定义指令吗?
- C++数组类定义和实现,未在作用域中声明
- C++11 Lambda闭包通过引用涉及一个堆栈变量,该变量离开作用域是允许的,但得到了未定义的行为
- 我的类未在作用域中定义?
- 如何在类的作用域中定义函数,而不是将其定义为成员函数
- 如何在与 c++ 中定义的函数作用域相同的文件中限制函数作用域
- 用户定义文字的作用域是什么
- 返回指向类定义的结构体的指针,多个作用域操作符
- 未在此作用域中声明的信号/对class::方法的未定义引用
- 类的作用域和定义顺序
- 在运行时定义非作用域文本