以下错误:
class C { /*...*/ };
int main() {
C c(); // declares a function c taking no arguments returning a C,
// not, as intended by most, an object c of type C initialized
// using the default constructor.
c.foo(); // compiler complains here.
//...
}现在虽然错误很明显,但一旦你知道它,我想知道是否有任何明智的用途用于这种局部函数声明,除非你可以这样做 - 特别是因为没有办法在同一个函数中定义这样的局部函数 块; 你必须在其他地方定义它。
我认为Java风格的本地类是我经常使用的一个非常不错的功能,尤其是匿名排序。 即使是本地C ++类(可以有内联定义的成员函数)也有一定用处。 但是这个没有定义的本地函数声明对我来说似乎非常尴尬。 它只是一个C遗产,还是有一些我不知道的更深层的用例?
这个程序
int main()
{
void g();
cout << "Hello ";
g();
return 0;
}
void g()
{
cout << "world." << endl;
}输出Hello world.这个程序
void fun()
{
cout << "world." << endl;
}
int main()
{
void g();
g = fun;
cout << "Hello ";
g();
return 0;
}不编译. gcc:
error: cannot convert 'void ()()' to 'void ()()' in assignmentcomeau:
error: expression must be a modifiable lvalue发布于 2018-03-12 09:55:12
当我想将它们作为参数传递给其他函数时,我想在C中使用局部函数声明。我一直在用其他语言来做这件事。原因是封装了数据结构的实现。
例如。我定义了一些数据结构,例如树或图表,我不想公开其内部实现的细节,例如因为我可能想改变或改变它。所以我公开了它的元素的访问器和增变函数,以及遍历元素的遍历函数。遍历函数的参数是一个函数,它对元素进行操作;遍历函数的任务是在每个元素上执行参数函数,并可能以某种方式汇总结果。现在,当我调用遍历函数时,参数函数通常是一些依赖于本地状态的特定操作,因此应该定义为本地函数。必须将包含本地状态,外部变量为全局变量的函数或专门为保持它们而创建的内部类推入该函数中,这很难理解。但这是我用C和Java所遇到的问题,而不是用C ++。
发布于 2018-03-12 11:29:01
缩小函数声明的范围:
int main()
{
void doSomething();
doSomething();
return 0;
}
void otherFunc()
{
doSomething(); // ERROR, doSomething() not in scope
}
void doSomething()
{
...
}发布于 2018-03-12 12:53:38
这是一个前向声明原型。 可以想象,如果你有很多本地功能,或者与定义顺序相反的局部功能,你可能需要它。
https://stackoverflow.com/questions/-100007591
复制相似问题