是否有内部功能函数声明一用?是否有内部功能函数声明一用?(Is there a use for fu

2019-05-12 04:17发布

我们可以声明里面的功能(我想要一个局部变量,但它解析为函数声明)功能:

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)
}

是唯一的理由“因为它使分析器更简单”和“因为标准是这么说的”,或者是有一个不起眼的使用了呢?

Answer 1:

这的确是一个C的问题,因为这种行为是直接从C派生(尽管它会用C更按++,因为最伤脑筋的parse)。

我怀疑答案(C中的情况下,至少)是,这可以让你的范围函数声明的存在,精确需要它们的地方。 也许,在C.初期是有益的,我怀疑任何人做任何更多,但为了向后兼容性起见,不能从语言中删除。



Answer 2:

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

static int read(int x)
{
    return bar(x);
}

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


Answer 3:

另一个函数内的函数声明隐藏其他重载函数。 7号线如编译器错误

#include <iostream>

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;
}


Answer 4:

是唯一的理由“因为它使分析器更简单”和“因为标准是这样说的”

是啊,基本上是这样。

一切都可以是一个函数的声明, 一个函数声明。

不幸的是它的那些“仅仅是”案件之一。



文章来源: Is there a use for function declarations inside functions?