【发布时间】:2015-07-10 02:58:58
【问题描述】:
这不是 lambda 函数问题,我知道我可以将 lambda 分配给变量。
允许我们在代码中声明但不定义函数有什么意义?
例如:
#include <iostream>
int main()
{
// This is illegal
// int one(int bar) { return 13 + bar; }
// This is legal, but why would I want this?
int two(int bar);
// This gets the job done but man it's complicated
class three{
int m_iBar;
public:
three(int bar):m_iBar(13 + bar){}
operator int(){return m_iBar;}
};
std::cout << three(42) << '\n';
return 0;
}
所以我想知道的是,为什么 C++ 会允许 two 看起来没用,而 three 看起来要复杂得多,但不允许 one?
编辑:
从答案看来,代码内声明可能能够防止命名空间污染,但我希望听到的是为什么允许声明函数的能力但不允许定义函数的能力。
【问题讨论】:
-
第一个,
one是一个函数定义,另外两个是声明。 -
我认为您用错了术语——您想问“允许我们在代码中声明但不定义函数有什么意义?”。当我们在这里时,您可能是指“在函数中”。都是“代码”。
-
如果您要问为什么该语言有怪癖和不一致之处:因为它经过数十年的演变,通过许多具有许多不同想法的人的工作,从在不同时间出于不同原因发明的语言。如果你问为什么它有这个特殊的怪癖:因为(到目前为止)没有人认为本地函数定义足够有用以进行标准化。
-
@MikeSeymour 说得对。 C 的结构不如 Pascal 好,并且始终只允许顶级函数定义。所以原因是历史性的,加上缺乏改变它的需要。该函数 declarations 是可能的只是通常可能的范围声明的结果。禁止函数将意味着一个额外的规则。
-
@JonathanMee:可能是因为一般来说,块中允许声明,并且没有特别的理由专门禁止函数声明;只允许没有特殊情况的任何声明更简单。但是“为什么”并不是一个真正可以回答的问题。语言之所以如此,是因为它就是这样进化的。
标签: c++ functor function-declaration