函数内部是否有函数声明?

我们可以在函数内部声明函数(我想要一个局部变量,但它作为函数声明解析):

struct bvalue; struct bdict { bdict(bvalue); } struct bvalue { explict operator bdict() const; } struct metainfo { metainfo(bdict); } void foo(bvalue v) { metainfo mi(bdict(v)); // parses as function declaration metainfo mi = bdict(v); // workaround // (this workaround doesn't work in the presence of explicit ctors) } 

唯一的原因是“因为它使解析器变得更简单”和“因为标准是这样说的”,还是有一个不明确的用途?

这实际上是一个C问题,因为这种行为是直接从Cinheritance的(尽管由于最令人烦恼的解析,它在C ++中得到了更多的压力)。

我怀疑答案(至少在C的上下文中)是,这允许您将函数声明的存在范围精确地定位到它们所需的位置。 也许这在C的早期是有用的。我怀疑任何人都这样做了,但为了向后兼容,它不能从语言中删除。

如果您需要使用名称与当前转换单元(源文件)中的内部(静态)函数或变量冲突的外部函数,这将非常有用。 例如(愚蠢但它得到了重点):

 static int read(int x) { return bar(x); } static int foo() { ssize_t read(int, void *, size_t); read(0, buf, 1); } 

另一个函数内的函数声明隐藏了其他重载函数。 例如第7行的编译器错误

 #include  void f(int); int main() { void f(char *); f(10); // Line 7 f("Hello world"); return 0; } void f(int a) { std::cout << a; } void f(char *str) { std::cout << str; } 

唯一的原因是“因为它使解析器更简单”和“因为标准说的如此”

是的,基本上。

可以是函数声明的所有东西都是函数声明。

不幸的是,这是“正是”案件之一。