1

有时我会编写如下代码

struct Bob
{
    Bob() {}
};

int main()
{
    Bob b();
}

我想做的是使用 Bob 的默认构造函数创建一个对象 b。要修复它,我必须删除 b 之后的括号。事实证明编译器将这一行解释为函数原型!

好的,我可以理解遵守规则。但是为什么你可以把一个函数原型放在一个函数里面呢?什么目的?

4

1 回答 1

2

大概是因为在 C 中该语法没有其他可能的含义(没有成员函数或构造函数),所以他们将其指定为函数声明。

然后,当 C++ 从 C 继承功能时,他们无法改变这种结构的含义,而不会冒破坏现有代码的风险。

如果您问他们为什么完全允许本地函数声明,那可能是因为他们希望允许函数的范围尽可能接近以供使用,或者它可能只是随着时间的推移而丢失。

于 2013-07-15T18:19:19.580 回答