KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Most C++ programmers like me have made the following mistake at some point: 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. //... } Now while the error is pretty obvious once you know it I was wondering if there is any sensible use for this kind of local function declaration except that you can do it -- especially since there is no way to define such a local function in the same block; you have to define it elsewhere. I think that Java-style local classes are a pretty nice feature which I tend to use often, especially the anonymous sort. Even local C++ classes (which can have inline-defined member functions) have some use. But this local function declaration without definition thing seems very awkward to me. Is it just a C-legacy or is there some deeper use case which I am not aware of? Edit for the non-believers: C c() is not a function pointer declaration. This program int main() { void g(); cout << "Hello "; g(); return 0; } void g() { cout << "world." << endl; } outputs Hello world. This program void fun() { cout << "world." << endl; } int main() { void g(); g = fun; cout << "Hello "; g(); return 0; } does not compile. gcc complains: error: cannot convert 'void ()()' to 'void ()()' in assignment comeau: error: expression must be a modifiable lvalue
Tags (comma-separated)
Save Edits
Cancel