在这种情况下,"使用"在做什么,正在存储什么?



我有以下类:

class Foo{
}
class Bar{
public:
using meth = Foo* (*)(int a, std::string b);
}

有人能解释一下这条线的意思吗:

using meth = Foo* (*)(int a, std::string b);

在我看来,这是一种存储指向构造函数或其他东西的指针的方法。如果有人能解释,我将不胜感激。

请随意编辑问题本身,使其更具描述性——如果我知道这段代码的作用,我就不会问这个问题。

using meth = Foo* (*)(int a, std::string b);

使meth成为冗长的函数指针类型声明的简写(类型别名)。

它可以像这样使用:

Foo* bar(int a, std::string b);
meth baz = bar;

在这种情况下,它只是创建类型别名的一种新形式,就像使用typedef一样。它说类型别名meth是指向函数的指针,该函数采用intstd::string参数,并返回指向Foo的指针。然后,您可以使用它来声明变量,例如

meth walter;

然后,您可以像其他任何变量一样为变量walter赋值。

类型别名存储在编译器的内存中,它不会写入对象或可执行文件,它只是由编译器使用和内部使用。


应该注意的是,与C++中的许多其他东西一样,上下文很重要,关键字using在不同的上下文中可以做不同的事情。

它可以用于创建类型别名(如问题中所述),可以用于创建名称空间别名,可以用于将符号从一个作用域拉入另一作用域(不幸的是,最常见的是)将所有符号从std名称空间拉入全局作用域)。

相关内容

最新更新